仅在Git中切换子目录的分支

时间:2011-09-28 11:50:03

标签: git git-svn git-branch

我正在使用两个主要分支和两个主要文件夹的Git存储库。其中一个文件夹在两个分支之间非常相似,另一个则非常不同。这意味着,即使我只是处理公共文件夹,由于另一个文件夹需要进行所有更新,因此在两个分支之间切换很慢。

是否可以在Git存储库中切换子文件夹的分支而无需切换存储库其余部分的分支?在Subversion中,我可以在任何子文件夹上使用svn switch,一切都可以使用Just Work™,但我没有在Git中找到等价物。

理想情况下,当我在两个分支共有的文件夹中工作时,我希望能够在该文件夹中切换分支,对任一分支进行提交,并执行所有其他有用的Git优点,必须等待其他文件夹被或多或少地完全重写。

只是为了使问题复杂化,我正在使用git svn;我提到的两个主要分支是主干和底层Subversion存储库中的一个分支。

4 个答案:

答案 0 :(得分:3)

你可以使用名为“稀疏结账”的东西在git中执行此操作。首先,您必须在项目中启用此功能:

git config core.sparsecheckout true

然后,您必须设置要签出的目录。在编辑器中打开.git/info/sparse-checkout,并列出要限制结帐的目录(每个都在一个单独的行上)。然后运行以下命令:

git read-tree -m -u HEAD

您可以稍后禁用备用检查以使行为恢复正常。

答案 1 :(得分:3)

我找到了一个新的解决方案:git-new-workdir。它不允许我切换子文件夹,但它确实让我有单独的工作目录,我可以切换它们而不是使用“切换”操作。

它解决了潜在的问题:我可以为每个主分支创建一个工作目录,每当我想要没有成本时在它们之间交换,并且两个工作目录共享相同的Git存储库,所以我不需要两个将{(3}}中建议的Ben Lee克隆为单独的克隆。

要获取我的(Cygwin)系统上的脚本,我需要下载并安装Git源代码;它位于contrib目录中。

答案 2 :(得分:2)

如果你真的想要能够做到这一点,Git的唯一方法就是将子文件夹设置为子模块http://book.git-scm.com/5_submodules.html

我想SVN允许这个的原因是因为它在每个子文件夹中放置了单独的.svn文件,用于跟踪当前状态。

答案 3 :(得分:0)

我不认为这是可能的。 Git是一个内容跟踪器,可跟踪内容更改,而不是文件或文件夹。

作为一种解决方法,您可以使用git-svn在一个Git存储库中获取SVN中继,在另一个存储库中获取SVN分支。