Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git repo中获得对文件的更改,同时忽略新文件_Git_Diff - Fatal编程技术网

如何在git repo中获得对文件的更改,同时忽略新文件

如何在git repo中获得对文件的更改,同时忽略新文件,git,diff,Git,Diff,我有一个git repo,其中包含自动生成的源代码文件。随着时间的推移,对该代码进行了一些轻微的手动修改。我现在需要重新生成文件,但我不想错过所做的任何更改 我想做的是得到一个随时间推移对该文件夹所做的所有更改的差异,但要排除每个文件的原始“添加”。这样,我就可以将差异应用于新的文件集 还有一个更重要的细节:并非所有文件都是同时添加的。添加内容与编辑内容混合在一起。因此,它不像从特定提交开始生成差异那样简单 有什么想法吗 更多背景: 自动生成的文件是从WSDL文件生成的SOAP代理类 我们处理

我有一个git repo,其中包含自动生成的源代码文件。随着时间的推移,对该代码进行了一些轻微的手动修改。我现在需要重新生成文件,但我不想错过所做的任何更改

我想做的是得到一个随时间推移对该文件夹所做的所有更改的差异,但要排除每个文件的原始“添加”。这样,我就可以将差异应用于新的文件集

还有一个更重要的细节:并非所有文件都是同时添加的。添加内容与编辑内容混合在一起。因此,它不像从特定提交开始生成差异那样简单

有什么想法吗

更多背景:

  • 自动生成的文件是从WSDL文件生成的SOAP代理类
  • 我们处理的服务不止一个,因此这些类是根据需要添加的
  • 我们收到了一个更新的服务器虚拟机,其中包含一些小的修复
  • 用于生成代理类的工具有一些不完整的实现,因此对这些文件所做的更改是可行的
种子:

  • 有没有办法知道文件第一次提交的SHA?我猜是
    git-log
    grep
    还是
    sed
    的味道
  • 也许可以获得一个特定文件的提交计数,其中1==没有更改,只有一个插入,我可以将其grep掉
修改后的答案:

您需要一些脚本来遍历该目录,并使用每个文件通过
git日志--格式=%H文件名| tail-1

然后通过:

git diff^output\u of\u在SHA\u last\u commit fileName上方

我假设您仍然拥有WSDLs的旧副本,是一个优秀的源代码管理用户。考虑到这一点,我将做以下工作:

  • 创建并签出一个新分支,从以前的任何 添加了有问题的文件
  • 使用旧的wsdl和commit生成类
  • 使用新的wsdl和commit生成类
  • 签出主机并将新分支合并到中
这将合并自动生成的文件与手动调整的差异


保留该分支,以便每次WSDL更改时,都可以检查该分支并重复最后两个步骤。基本上,该分支应该始终只包含自动生成的文件。

我需要一个递归解决方案。。有很多文件。很抱歉,我误解了你的问题。我刚刚更新了答案。我仍然认为这不管用。。每个文件的两个SHA可能不同。“SHA_first_commit^ SHA_last_commit”难道不会给我所有的改变,除了最后一个吗?也许我不理解你的问题。这将为您提供在指定的两次提交之间foldername/*中更改的所有内容。这就是您想要的吗?您可以使用git log--diff filter=A--(查找“添加”此文件的位置的“更改”)获得初始提交。过去,由于缺乏远见,您已陷入困境。。。手动执行作业(编写脚本时)。然后修复程序,防止再次发生。我会对每个生成的文件手动执行挤压/合并bash脚本,并简单地运行多次。为了您的利益,我希望不涉及重命名:)为什么您不能从当前版本重新生成文件…?自定义脚本是我现在所设想的,我很好奇,看看我是否忽略了git可以为我做的事情。@knittl,我想问题是生成的文件会发生变化(也许)戏剧性地,他只是想重新应用他对先前生成的文件所做的更改,因此,只要重新生成并与当前版本进行差异/合并,也会显示所有自动生成的更改……对自动生成代码的更改实际上是非常小的。它们是web服务维护版本的更改。但是,即使我可以得到一个不适用于新文件的差异,这也是一个进步,因为我至少可以更好地了解更改的内容。这是一个很好的建议。它有点简化,因为原始文件(来自同一个WSDL)是根据需要增量添加的。所以诀窍是总是将这些自动生成的文件添加到分支中,并将其合并到主文件中?然后在master中进行所有更改?另外,可能有意思的是,我们有30多个wsdl,这就是为什么我们没有一次生成并提交所有内容。在实现这些功能时,我们只添加了所需的功能。虽然这会简化这个过程。它们是否在
master
中增量添加并不重要。您可以将它们全部添加到
autogen
分支的一个块中,只要该分支是从它们全部添加到
master
之前的某个点创建的,并且在它们全部添加后的某个点才合并。您将无法使用
autogen
构建任何有用的内容,但您不需要这样做。它的唯一目的是帮助您合并该文件子集。