在两次 git 提交之间生成所有要删除的文件和所有要添加的文件的列表
Produce list of all files to delete and all to add between two git commits
我有一个必须处理的旧系统,而且界面很垃圾。我无法重命名或移动文件。我必须删除旧位置并添加新位置。
我通过提供要删除的所有文件的列表,然后提供要添加/更新的所有文件的列表来做到这一点
当我重命名文件并在 git 中提交它时,它算作一个 rename
操作,所以当我 运行
git diff SHA1 SHA2 --name-only
我得到了所有删除、添加和重命名的列表。如果我运行
git diff SHA1 SHA2 --name-only --diff-filter=R
我得到了操作的最终结果(文件重命名为 到 但不是重命名为 from 的内容)。如果我运行
我删除了文件,但没有重命名为 的文件。
我不需要在单个命令中使用它,我可以产生重叠并稍后对输出进行重复数据删除。
帮忙?谢谢
在git中没有重命名操作。当 diff
报告重命名时,它在一个路径上看到一个删除,在另一个路径上看到一个添加,计算出新文件是 "similar enough" 到被删除的文件,它可能只是一个重命名,并推断你希望这样报道。
如果您不想将它们报告为重命名,而是希望分别报告删除和添加,那么您可以说
git diff SHA1 SHA2 --name-only --no-renames
更有用的是,你可以说
git diff SHA1 SHA2 --name-status --no-renames
并且删除文件的行将以 D
开头,添加文件的行将以 A
.
开头
另一方面,如果您正在使用 --name-status
,那么根据您对输出所做的操作,也许不关闭重命名检测就可以了;然后你会得到类似
的东西
$ git diff SHA1 SHA2 --name-status
R100 file1 file2
其中 IIRC R100
表示 "renamed with 100% content match"
但话又说回来,如果将条目放在不同的行上对您来说效果很好,那么关闭重命名检测可能会更有效(尤其是在实际发生许多删除和添加的情况下)。
我想最后一个排列:如果你真的只想要文件名列表,那么你可以制作一个添加列表
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=A
和删除之一
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=D
我有一个必须处理的旧系统,而且界面很垃圾。我无法重命名或移动文件。我必须删除旧位置并添加新位置。
我通过提供要删除的所有文件的列表,然后提供要添加/更新的所有文件的列表来做到这一点
当我重命名文件并在 git 中提交它时,它算作一个 rename
操作,所以当我 运行
git diff SHA1 SHA2 --name-only
我得到了所有删除、添加和重命名的列表。如果我运行
git diff SHA1 SHA2 --name-only --diff-filter=R
我得到了操作的最终结果(文件重命名为 到 但不是重命名为 from 的内容)。如果我运行
我删除了文件,但没有重命名为 的文件。
我不需要在单个命令中使用它,我可以产生重叠并稍后对输出进行重复数据删除。
帮忙?谢谢
在git中没有重命名操作。当 diff
报告重命名时,它在一个路径上看到一个删除,在另一个路径上看到一个添加,计算出新文件是 "similar enough" 到被删除的文件,它可能只是一个重命名,并推断你希望这样报道。
如果您不想将它们报告为重命名,而是希望分别报告删除和添加,那么您可以说
git diff SHA1 SHA2 --name-only --no-renames
更有用的是,你可以说
git diff SHA1 SHA2 --name-status --no-renames
并且删除文件的行将以 D
开头,添加文件的行将以 A
.
另一方面,如果您正在使用 --name-status
,那么根据您对输出所做的操作,也许不关闭重命名检测就可以了;然后你会得到类似
$ git diff SHA1 SHA2 --name-status
R100 file1 file2
其中 IIRC R100
表示 "renamed with 100% content match"
但话又说回来,如果将条目放在不同的行上对您来说效果很好,那么关闭重命名检测可能会更有效(尤其是在实际发生许多删除和添加的情况下)。
我想最后一个排列:如果你真的只想要文件名列表,那么你可以制作一个添加列表
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=A
和删除之一
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=D