Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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:检索两个修订版之间的所有新文件和修改的文件_Git - Fatal编程技术网

Git:检索两个修订版之间的所有新文件和修改的文件

Git:检索两个修订版之间的所有新文件和修改的文件,git,Git,我试图使用diff命令来获取所有修改过的和新的文件,在git上使用SHA进行两次修订 现在,我可以使用下面的示例命令生成补丁 git diff SHA1 SHA2>patch.txt 但是,我需要zip文件或文件夹中新/修改文件的完整版本 [编辑,更多信息] 我真的需要一个输出与整个文件更改,而不是补丁格式 提前感谢。首先,免责声明;我对Perforce一无所知。也就是说,为什么您不能从git获取补丁并将其应用到您的performe环境中呢?比如: git diff sha1 sha2 | (c

我试图使用diff命令来获取所有修改过的和新的文件,在git上使用SHA进行两次修订

现在,我可以使用下面的示例命令生成补丁

git diff SHA1 SHA2>patch.txt

但是,我需要zip文件或文件夹中新/修改文件的完整版本

[编辑,更多信息]
我真的需要一个输出与整个文件更改,而不是补丁格式


提前感谢。

首先,免责声明;我对Perforce一无所知。也就是说,为什么您不能从
git
获取补丁并将其应用到您的performe环境中呢?比如:

git diff sha1 sha2 | (cd /my/perforce/repo; patch -p1)
这应该考虑将所有修改转换到新环境中

如果由于某种原因无法使用,您可以在修订之间获得一个新的/修改的/删除的文件列表,如下所示:

$ git log --name-status --pretty=format:'%H'  sha1..sha2 
0bf1587d08e303bc167b713eb5a9c05d55b34fde
M       fragments/kube-examples.yaml

36ba26ec88ac478eb4dc29b997c9e37fa51e37cf
M       fragments/configure-kubernetes-master.sh

6595da2f666dbe5c473457cd023c2a81555cb3b9
M       fragments/docker.service.yaml
D       fragments/wait-for-flanneld.yaml
M       kubenode.yaml

cb51ae97b769354656e103655c2532562b15c079
M       fragments/configure-flannel.sh
这将为您提供如下输出:

$ git log --name-status --pretty=format:'%H'  sha1..sha2 
0bf1587d08e303bc167b713eb5a9c05d55b34fde
M       fragments/kube-examples.yaml

36ba26ec88ac478eb4dc29b997c9e37fa51e37cf
M       fragments/configure-kubernetes-master.sh

6595da2f666dbe5c473457cd023c2a81555cb3b9
M       fragments/docker.service.yaml
D       fragments/wait-for-flanneld.yaml
M       kubenode.yaml

cb51ae97b769354656e103655c2532562b15c079
M       fragments/configure-flannel.sh
也就是说,对于每个提交id,提供一个添加、删除或删除id的列表 修改过的文件。您可以通过一个shell脚本来运行它 命名的文件。这不会让你得到你想要的,但也许
它将激发一个合适的解决方案?

执行一个git diff和管道到补丁文件(如您所述,然后将其压缩到zip)

正如您在Q:
git diff sha1..sha1>>补丁a.txt中提到的那样

然后您可以将其压缩为zip:(取决于您的操作系统或使用7-zip,这是跨平台的)

如果需要这些文件,请执行以下操作:

cp-pv--parents git diff--name only DESTINATION-DIRECTORY

或者这个完整的bash脚本:

#!/bin/bash
# Target directory
TARGET=/target/directory/here

for i in $(git diff --name-only)
    do
        # First create the target directory, if it doesn't exist.
        mkdir -p "$TARGET/$(dirname $i)"
        # Then copy over the file.
        cp "$i" "$TARGET/$i"
    done

另一种方法是使用我将手动执行的perfoce部分。我真的需要更改整个文件的输出,而不是修补程序格式。我真的需要更改整个文件的输出,而不是修补程序格式。然后,您需要执行一个diff,然后处理文件名。我可以在哪里指定bash脚本上的sha?谢谢您可以将sha-1添加到if条件
git diff--name only
中,作为常规diff命令抱歉,我正在使用cmd窗口并生成bat文件,我收到错误“此时我是意外的”。:s