1

我试图将一些带有历史记录的文件从一个存储库移动到另一个存储库。有很多话题都在讨论这个问题,但我遇到了一些我还没有看到的问题。

所以我做的步骤是:

git clone --no-local --no-hardlinks /path/to/origninal-rep repA  
cd repA
git remote rm origin 
git filter-branch -f --prune-empty --index-filter "git rm --cached --ignore-unmatch $(git ls-files | grep -v 'include/file1.h\|include/file2.h')"

旨在保留仅与这两个文件相关的历史记录并将它们移动到另一个存储库。但是,我遇到了以下问题:

重写 6768c299b2b25754a558336e025ce92576c954f2 (1/200)/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-filter-branch: line 329: CMakeLists.txt: command not found ....

奇怪的是,我可以一个一个地删除文件,例如:

git filter-branch -f --prune-empty --index-filter 'git rm --cached --ignore-unmatch .gitignore' HEAD 

我还在虚拟存储库(只有几个文件)上尝试了这个,一切正常!所以它在现实生活中不起作用,也许与输出的长度有点关系git ls-files

更新: 我一直在寻找解决方案,我想知道输出应该是什么git ls-files?我列出了带有换行符的文件(每行 1 个文件),而似乎git rm应该在一行中有文件,例如:

git filter-branch --prune-empty --index-filter 'git rm --cached --ignore-unmatch DIR_1/* DIR_2/*' HEAD

这会是个问题吗?

更新2:

我遵循这个解决方案来实现目标,一切正常。

4

0 回答 0