如何定义差异路径规范(diff pathspec)?

3
gitdiffcore(7) 中,它简单地说明:
The pathspecs are used to limit the world diff operates in. 
They remove the filepairs outside the specified sets of pathnames. 
E.g. If the input set of filepairs included:

    :100644 100644 bcd1234... 0123456... M junkfile

我的问题是如何阅读这个,即哪些字段是哪些,它们应该代表什么?
我正在寻找的是,我是否可以理解检测路径名更改(作为选项)与文件重命名检测之间是否有任何里程碑,后者既昂贵又倾向于向用户建议许多文件已被重命名(而不是单个路径更改)。
2个回答

3
让我们来分析一下:
:100644        100644         bcd1234...     0123456...     M         junkfile
old file mode  new file mode  old file hash  new file hash  modified  file name

要从指定的提交版本中创建一个给定名称的存档文件夹,请使用git archive命令

git archive --prefix='your_product_v1.2/' -o 'your_product.zip' v1.2:path/to/directory/

假设您想从版本v.1(标签、分支,甚至可以在此处使用提交ID)中的path/to/directory/创建归档。 归档将以your_product.zip命名(格式从文件名推断,.tar也可能),并且所有文件都将放置在zip文件内的子文件夹your_product_v1.2中。
这样,您就不必重命名VCS中的目录(您为什么要这样做呢?)。 希望这有所帮助! 如果仍然不清楚,请留言。

而“M”表示文件已被修改,“R”(重命名)表示移动。- knittl。(只是将这些位连接在一起) - Philip Oakley
@philip:是的,这就是为什么我写了M,并在其下方写了“modified”。你的问题读起来好像你不关心重命名,因为它们会给路径更改带来一些错误的印象。我没有完全理解你的意思 ;) - knittl
实际上,我是在寻找另一种解决方案......我们有一个常见的工作流程,它会使用版本信息重命名顶级目录,然后压缩该目录。这意味着Git(diff)>认为<我们已经重命名了每个文件!我正在努力让大家使用Git,但这个工作流程问题使得使用起来很麻烦.... - Philip Oakley
@philip:曾经有一些“隐藏批量重命名”的补丁,但它从未进入主分支(甚至不再包括在next或pu中)。所以这不是太容易。如果我可以问一下:为什么您要使用版本信息重命名目录?这听起来很奇怪。您是否将版本号作为目录名称的一部分?有更好的方法来做到这一点,让我扩展我的答案。 - knittl
这是一个遗留的本地进程问题。作为一种简单的本地管理方法,人们使用TLD来代表他们的版本号/名称,并将其压缩存储。当代码达到某个“点”时,TLD下面的代码就会被复制到“大型”公司VCS中(需要处理大量文档);我正在尝试让Git在公司VCS和代码hack级别之间得到应用,并且如果我要使Git成为可行的现实,我需要“应对”这些TLD重命名。希望这解释了我的困境。 - Philip Oakley

0

前两个数字是文件组权限标志。后两个数字是修改前和修改后的sha1指示器。M表示它是一个修改。最后一个是您的文件名。


M 表示文件已修改。移动操作用 R(重命名)表示。 - knittl
感谢@knittl和@adymitruk的解释。 - Philip Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接