【问题标题】:is possible to work only with a part of a git repository?是否可以仅使用 git 存储库的一部分?
【发布时间】:2016-03-30 09:55:45
【问题描述】:

我正在使用JGit 开发一个桌面应用程序,以便构建一个用于存储文件的云系统。

现在,多个用户为同一个存储库做出贡献,但并不是每个人都有兴趣使用整个项目。

例如,我正在与其他人一起开发具有MVC 架构的软件,我只需要访问项目的控制器子目录。为此,当我 clone/pull/push 存储库时,我只想使用我需要的部分。我看到了使用git 创建子模块或结帐的可能性,但我不明白这是否适合我的问题。

【问题讨论】:

  • 在 git 中为其创建新分支,并在完成后合并为应用程序的功能
  • 我试图通过我的反对票帮助您找到键盘上的“shift”键。

标签: java git jgit


【解决方案1】:

简单的答案是你可以做到,但长答案是这样的:

Git store snapshots of ALL 在每个提交操作系统中存储 repo 的内容,如果您只想使用其中的一部分,您基本上只需要签出所需的部分你需要,当你提交时,你需要拥有当前提交的所有内容。

所以你也可以这样做,但这样做你不会得到任何东西。

您提到您听说过 submodulkes。


这里是关于子模块/子树的完整解释

您可以尝试阅读有关子模块的信息。

Submodules 始终允许将外部存储库嵌入到源代码树的专用子目录中指向一个特定的提交。


git submodule

像您目前所做的那样,将您的大项目分解为子项目。
现在将每个子项目添加到您的主项目中:

git submodule add <url>

将投影添加到您的存储库后,您必须对其进行初始化和更新。

git submodule init
git submodule update

Git 1.8.2 开始,添加了新选项 --remote

git submodule update --remote --merge

fetch将在每个子模块中merge them in从上游获取最新更改,并且check out子模块的最新版本。

正如the docs 描述的那样:

--remote

此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。

这相当于在每个子模块中运行 git pull。


但是,在 C 中的 bug 修复会影响与父层共享的代码的情况下,我将如何推送提交?

再次重申:使用子模块会将您的代码作为其内容的一部分放在主项目中。将其本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。


这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目。


git subtree

Git 子树允许您插入任何存储库作为另一个存储库的子目录

submodule 非常相似,但主要区别在于代码的管理位置。在子模块中,内容被放置在一个单独的 repo 中并在那里进行管理,这允许您将其克隆到许多其他 repo。

subtree 将内容作为根项目的一部分进行管理,而不是在单独的项目中。

您无需写下如何设置它以及了解如何使用它,您只需阅读这篇将解释一切的优秀文章。

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

【讨论】:

    【解决方案2】:

    您可以为其创建新分支。 Git - Branches,这里有教程。

    完成工作后,将其合并,以便项目中的每个人都能看到效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多