在filter-branch之后更新git子目录

时间:2013-11-04 12:25:37

标签: git git-filter-branch

我是git的新手,我对保持更新git存储库中的目录感兴趣,我正在克隆存储库并在其上运行filter-branch:

git clone http://url.git
cd repository
git filter-branch --subdirectory-filter directory-I-m-interested

这很棒,存储库现在具有目录的内容 - 我对根路径感兴趣,但是我仍然不确定如何使该目录上的文件与原始项目保持同步。

我尝试过以下命令:

git fetch
git cherry-pick hash_taken_from_last_command

我收到以下错误:

error: could not apply a0ede43... 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

可能我只是执行非意义,任何提示?

3 个答案:

答案 0 :(得分:1)

听起来你想要的是一个稀疏的结账。看这里

http://briancoyner.github.io/blog/2013/06/05/git-sparse-checkout/

例如

。它将git中的工作副本(签出文件)限制为原始git存储库的子集。您可以使用git正常关注原文,但只看到您感兴趣的部分。

答案 1 :(得分:0)

你正在执行无意义。我相信您正在寻找svn的功能,因为您只想使用一个子目录。使用上述git filter-branch命令后的本地存储库,git push可能会失败,git push -f会擦除存储库的其他目录。

答案 2 :(得分:0)

Git为存储库的完整性提供了非常强有力的保证。运行git filter-branch是一个深度外科操作,导致一个全新的存储库,其中重新计算了所有提交校验和等。事实上,您已经重写了项目的整个历史记录,因此在从旧存储库获取和合并更改期间,Git将正确地抱怨它无法识别存储库的新的,已更改的历史记录。 Git没有办法让人格分裂,同时记住并忘记其余的目录。

正如您所说,您是Git的新手,所以如果您真的需要在您的存储库中进行如此深入和侵入性的外科手术,请重新考虑。