在筛选器分支后更新git子目录

在筛选器分支后更新git子目录,git,git-filter-branch,Git,Git Filter Branch,我是git新手,我对更新git存储库中的目录感兴趣,我正在克隆存储库并在其上运行筛选器分支: git clone http://url.git cd repository git filter-branch --subdirectory-filter directory-I-m-interested 这太棒了,存储库现在有根路径中的目录-I-m-interest的内容,但是我仍然不确定如何保持该目录中的文件与原始项目同步 我已尝试使用以下命令: git fetch git cherry-pic

我是git新手,我对更新git存储库中的目录感兴趣,我正在克隆存储库并在其上运行筛选器分支:

git clone http://url.git
cd repository
git filter-branch --subdirectory-filter directory-I-m-interested
这太棒了,存储库现在有根路径中的目录-I-m-interest的内容,但是我仍然不确定如何保持该目录中的文件与原始项目同步

我已尝试使用以下命令:

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'
错误:无法应用a0ede43。。。2.
提示:解决冲突后,标记更正的路径
提示:使用“git add”或“git rm”
提示:并使用“git commit”提交结果

可能我只是在执行非感觉,有什么提示吗?

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

git提供了关于存储库完整性的非常有力的保证。运行
git filter branch
是一项深入的外科手术,它会产生一个全新的存储库,并重新计算所有提交校验和等。事实上,您已经重写了项目的整个历史记录,因此在从旧存储库获取和合并更改时,git会正确地抱怨它无法识别新存储库,已更改存储库的历史记录。Git不可能有分裂的个性,同时记住并忘记其余的目录


正如您所说,您是Git新手,因此请重新考虑您是否真的需要对您的存储库执行如此深入和侵入性的外科手术。

听起来您想要的是一个稀疏的签出。看这里


比如说。它将git中的工作副本(签出文件)限制为原始git存储库的子集。您可以使用git正常地遵循原始目录,但只需查看您感兴趣的部分。

您需要丢弃其他目录的原因是什么?我正在创建一个使用插件的项目,这些插件中的每一个都应该具有相同的根路径,例如~/。program/{plugin1,plugin2..,},其中一些插件的内容非常害羞(大约10行代码),因此我认为为它们中的每一个建立一个存储库是过分的,我创建了一个包含其中几个的程序插件存储库。现在,我用每个插件的名称克隆了通用插件库,并清理除当前插件之外的所有插件。现在开始工作了,缺少的是更新机制。因此,如果要克隆到
$CONFIG\u PATH/plugins
中,您需要多次克隆到
$CONFIG\u PATH/plugins
子目录中,以手动重新组装包含插件子目录的
$CONFIG\u PATH/plugins
目录,或者为所有插件使用一个大型存储库,并且很高兴它易于使用,并且您将它们都很好地组织在一个统一的结构中,或者有许多小的存储库,每个插件一个,也很高兴它易于使用,并且您可以随时克隆您需要的任何插件,而无需为最微小的repo担心几kB Git的开销。由于$CONFIG_PATH/plugins不仅包含我的插件,还包含其他人制作的插件,因此第二种方法(即使它意味着有很多额外的存储库)似乎是唯一合理的方法。我只是想戳一下,看看是否有什么git魔术师能做到这一点。谢谢你的评论。嗨,谢谢你花时间回答,我不想推回任何东西,我只是想与一个特定的目录保持同步,我想我可以删除整个存储库并在每次“更新”时过滤分支。谢谢你花时间回答,是的,可能不需要对整个存储库进行过滤分支,在每次“更新”时删除并重新创建存储库可以做到这一点,如果我没有丢失的话,稀疏签出+软链接也可以做到这一点。