我正在使用两个主要分支和两个主要文件夹的Git存储库。其中一个文件夹在两个分支之间非常相似,另一个则非常不同。这意味着,即使我只是处理公共文件夹,由于另一个文件夹需要进行所有更新,因此在两个分支之间切换很慢。
是否可以在Git存储库中切换子文件夹的分支而无需切换存储库其余部分的分支?在Subversion中,我可以在任何子文件夹上使用svn switch
,一切都可以使用Just Work™,但我没有在Git中找到等价物。
理想情况下,当我在两个分支共有的文件夹中工作时,我希望能够在该文件夹中切换分支,对任一分支进行提交,并执行所有其他有用的Git优点,必须等待其他文件夹被或多或少地完全重写。
只是为了使问题复杂化,我正在使用git svn
;我提到的两个主要分支是主干和底层Subversion存储库中的一个分支。
答案 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分支。