【发布时间】:2017-04-27 11:25:23
【问题描述】:
我想将两个文件从一个存储库移动到另一个存储库。这些文件最初添加为:
/src/init/Price.cs/tests/init/PriceTests.cs
这两个文件后来被重命名为:
/src/init/PriceValue.cs/tests/init/PriceValueTests.cs
然后移动到:
/src/moved/PriceValue.cs/tests/moved/PriceValueTests.cs
我尝试通过this description 为这些文件创建一组补丁,但我不确定如何传递文件所在的六个不同路径。
我已设法找到所有影响 PriceValue.cs 的提交 ID(通过重命名和移动),但将这些 ID 传递给 Git 失败并显示以下错误消息:
$ git format-patch -o /tmp/pricevaluepatches $(git log --all dfeeb 6966b 9f882 …)
-bash: /usr/local/bin/git: Argument list too long
那么,我如何为此创建一组补丁,只包含对上述文件的更改,但在每个文件的一次重命名和一次移动中包含它?
【问题讨论】:
-
您是否尝试过将所有提交 ID 放入文件
ids.txt(每行一个)并运行cat ids.txt | xargs git format-patch -o /tmp/pricevaluepatches? -
另外,您不必在命令中运行
git log --all ...。一个简单的git format-patch -o /tmp/pricevaluepatches dfeeb 6966b 9f882 …就足够了。 -
@NilsWerner,感谢您的建议。不过,这只解决了一半的问题。从我拥有的 ID 识别的提交中,我如何在重命名和移动中仅应用影响
PriceValue.cs和PriceValueTests.cs的更改? -
正如 cmets 在下面所说的格式补丁不能保留所有历史记录。如果有人感兴趣,有一种更简单的方法可以保存历史并将文件移动到另一个 repo:将这个 repo 合并到另一个 repo。这意味着所有的历史都在那里,无需处理单个提交。
-
@JanZerebecki,这会不会弄得一团糟,包括对所有 other 文件所做的所有更改?还是您的意思是在将源存储库与目标合并之前对源存储库执行
--filter-branch?
标签: git patch file-rename git-patch file-move