【问题标题】:How to sync a subdirectory of a git repo?如何同步 git repo 的子目录?
【发布时间】:2015-07-27 15:55:14
【问题描述】:

我只想拉取并推送到一个 git 存储库的子目录。这是我想要实现的示例:

假设我有一个存储库,其中包含两个文件夹 AB(如果重要的话,它们是顶级文件夹)。我只想工作并将更改推送到B,而其他人正在处理A,甚至可能也在B。因为我想提交我的更改,所以我不能将A 放在.gitignore 文件中,也不能使用git rm -rf --cached A,因为其他人需要A,但是,我知道,我永远不会碰它包含的任何文件,我根本不想存储它的不必要文件。我也不能使用submodules,因为我不想更改原始存储库,也不想维护第二个存储库。

所以我的问题是:这是否可能?如果可以,如何实现?

【问题讨论】:

  • 我的问题是:你为什么要这样做?在我看来,子模块对于您的用例来说并不是一个糟糕的解决方案。
  • @TimBiegeleisen 事实上我个人不想这样做,但我的同事是:P 他唯一的一点是,他的 SSD 上的空间非常有限,而另一个顶部-level 文件夹包含大量的其他资源(模型、纹理、渲染等),而且他知道,他将来不会使用它们
  • 老实说,你的同事投资更大的 SSD 比完成这个复杂的过程更便宜。
  • 听起来你的同事想要sparse checkout

标签: git push sync subdirectory pull


【解决方案1】:

您不能从存储库中的特定文件夹中拉取或推送。你拉或推树枝。

您是否考虑过在B 工作时建立一个分支并切换到它,这样您就不会污染您团队在A 上所做的工作?

如果您想将您的团队在主分支上所做的工作检索到您自己的分支,您甚至可以重新定位您的分支。

【讨论】:

    【解决方案2】:

    可以将 A 添加到 .git/info/exclude 文件中。该文件的工作方式与 .gitignore 类似,但不会离开本地计算机,因此不会影响您的同事。

    另一种方法是拆分您的存储库,然后使用subtree 而不是子模块来跟踪子目录中的更改。子树save 来自子模块带来的一些不便,但要保持同步还需要做更多工作。

    【讨论】:

    • 我接受了@topheman 的回答,因为您的两个回答都同样有价值,但他回答得更快。但是感谢您的努力,我也赞成您的努力!无论如何,我已经在使用子树,但是在我们这种任务的情况下,它无法完成 => 我们不需要两个 repos,我们只需要一个。当我们使用子树时,我们将它与两个 repos 一起使用,以实际维护可能是公共 (FOSS) 的私有部分的子集,作为反向镜像工具。但这有一个不同的提交方向
    • @PeterVaro 您做出了正确的选择:) 我的答案更多是对上述答案的扩展,看到它被选中会很奇怪。那些现实生活中的子树示例很有趣,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2014-08-20
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多