我有一个旧的系统,我必须处理,接口是垃圾。我无法重命名或移动文件。我必须删除旧位置并添加新位置。
我这样做是通过提供要删除的所有文件的列表,然后提供要添加/更新的所有文件
当我重新命名文件并在git中提交时,它被视为rename
操作,所以当我运行时
git diff SHA1 SHA2 --name-only
我得到所有删除的列表,添加和重命名为一个。如果我跑
git diff SHA1 SHA2 --name-only --diff-filter=R
我得到了操作的最终结果(文件被重命名为到但不是从重命名为)。如果我跑
我删除了文件,但没有将重命名为的文件。
我不在一个命令中需要这个,我可以在以后产生重叠并重复输出。
帮助?感谢。
答案 0 :(得分:3)
在git中没有重命名操作。当diff
报告重命名时,它会在一条路径上看到删除,在另一条路径上看到添加,计算新文件是否足够相似"对于被删除的内容,它可能只是一个重命名,并推断出你喜欢它的报道。
如果您不希望将它们报告为重命名,而是希望分别报告删除和添加,那么您可以说
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
表示"重命名为100%内容匹配"
但话又说回来,如果在单独的行上输入条目对您来说效果很好,那么关闭重命名检测可能会更有效(特别是如果实际发生了很多删除和添加)。
我想最后一个排列:如果你真的只想要文件名列表,那么你可以制作一个添加列表
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=A
和删除之一
git diff SHA1 SHA2 --name-only --no-renames --diff-filter=D