我试图使用diff命令来获取所有修改和新文件,使用SHA在git的两个修订之间。Git:在两个版本之间检索所有新的和修改的文件
现在我可以使用下面的示例命令生成补丁。
git的差异SHA1 SHA2> patch.txt
但是,我需要一个zip文件或文件夹中的新的/修改过的文件的整个版本。
[编辑,更多信息] 我真的需要一个输出,但整个文件都改变了,而不是一个补丁格式。
在此先感谢。
我试图使用diff命令来获取所有修改和新文件,使用SHA在git的两个修订之间。Git:在两个版本之间检索所有新的和修改的文件
现在我可以使用下面的示例命令生成补丁。
git的差异SHA1 SHA2> patch.txt
但是,我需要一个zip文件或文件夹中的新的/修改过的文件的整个版本。
[编辑,更多信息] 我真的需要一个输出,但整个文件都改变了,而不是一个补丁格式。
在此先感谢。
首先,免责声明;我对Perforce一无所知。这就是说,为什么你不能只从git
那里获得补丁并将它应用到你的perforce环境中呢?例如:
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
也就是说,对于每个提交ID,提供已添加,已删除或已修改文件的列表。你可以通过shell脚本运行这个命令来压缩 命名的文件。这不会得到你正是你想要的,但也许 它会启发一个适当的解决方案?
执行git的差异和管道修补文件(如你所描述,然后将其压缩到ZIP)
因为你已经在您的问与答中提到:git diff sha1..sha1 >> patches 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
另一种方法可以是使用Patches by Email
我真的需要一个输出,而不是以补丁格式更改整个文件。 – ganoncl 2015-02-08 02:56:49
然后,您将需要做一个比较,然后处理文件的名称。 – CodeWizard 2015-02-08 02:57:49
我可以在bash脚本中指定sha?谢谢! – ganoncl 2015-02-08 03:32:15
的perfoce部分我会做手工。我真的需要一个输出,而不是以补丁格式更改整个文件。 – ganoncl 2015-02-08 02:53:46