如何在SourceTree中的两个Git提交之间导出所有已更改的文件?

时间:2015-05-27 12:14:36

标签: git export atlassian-sourcetree

在TortoiseGit和TortoiseSVN中,可以将两个修订版之间的所有已更改文件(包括目录结构)导出到外部文件夹。

有没有办法在Atlassian SourceTree(适用于Windows)中这样做?

5 个答案:

答案 0 :(得分:9)

试试这个:

git archive --output=test_zip.zip HEAD $(git diff --diff-filter=ACMRTUXB --name-only hash1 hash2)

只需将示例中的哈希1和哈希2替换为所需的提交哈希,并将zip文件命名为您希望对其进行压缩的位置。

它对我有用

答案 1 :(得分:1)

这是将7zip与自定义操作(Tools > Options > Custom Actions > Add)结合使用的解决方案:

Menu caption: > dist.zip

[ ] Open in a separate window
[ ] Show Full Output
[X] Run command silently

Script to run: X:\Your\path\to\7-Zip\7z.exe

Parameters: a $REPO\dist.zip $FILE

(Restart SourceTree after creation for the changes to take effect!)

此操作可从“未暂存文件”的上下文菜单中进行,以及从“日志” /“历史记录”提交中更改的文件(即使选择了多个文件/多个提交),并将这些文件添加到回购根目录中的“ dist.zip”中。请注意,在添加文件之前不会删除该文件,因此,如果要从头开始,请记住先删除zip文件。

在不涉及构建系统的项目中,仅使用已更改的文件更新实时系统变得非常容易。我想知道如果没有它我怎么能生活和工作这么长时间。 :-)

答案 2 :(得分:0)

来自sourcetree:

  • 选择第一个从
  • 开始的提交
  • 按住shift键
  • 点击您要导出的上次提交
  • 用鼠标右键单击:并选择“创建补丁”
  • 设置要保存的文件的名称,并且您已准备好补丁

enter image description here

使用CLI:

打开终端(sourcetree图标栏上的图标)

然后输入:

git diff <sha-1>..HEAD > my_all_commits.diff

它将生成一个包含给定范围内所有更改的diff文件。

如何为每次提交生成单个补丁

git format-patch SHA-1..SHA-1
此提交将为每次提交创建一组修补程序,其中包含提交中的所有更改。然后,您可以选择全部使用它们,或者仅选择要在第二次回购时应用的那些。

祝你好运。

答案 3 :(得分:0)

这是我使用自定义操作+ bash脚本执行的操作。请注意,该解决方案适用于Unix,但是您应该可以将其复制到Windows .bat脚本中。

脚本

我将其另存为:archive-commit.sh

#!/bin/sh
HASH1=${1}
HOWMANYCOMMITS=${2:-1}
HASH2=$(git rev-parse $HASH1~$HOWMANYCOMMITS)
DATE="$(date "+%m_%d_%Y_%H%M")"
FILENAME="deploy-$DATE.zip" # Change this to wherever you want to save the file
git archive -o $FILENAME $HASH2 $(git diff --diff-filter=ACMRTUXB --name-only $HASH1 $HASH2)

例如致电时

./archive-commit.sh 17f6ca1993018761f7b936d46d2d600d4ee5ef85

与先前的提交相比,它将创建该提交的zip。

该脚本还将采用最后一个数字参数,例如:

./archive-commit.sh 17f6ca1993018761f7b936d46d2d600d4ee5ef85 3

它将创建此提交以及之前2个提交(共3个)的.zip。

SourceTree中的自定义操作

现在要将其集成到SourceTree中,您可以像这样创建自定义操作(将脚本目标更改为保存脚本的位置):

enter image description here

我必须创建多个动作,因为如果您选择多个提交AFAIK,那么SourceTree现在将无法获得两个哈希值。

结果

现在,在直接在SourceTree中的提交上单击鼠标右键时,您将获得一种导出zip的便捷方法。

enter image description here

答案 4 :(得分:-1)

我在windwos .bat

上为自定义操作执行了此代码

单一提交(在Google上搜索)[问题]:Create archive of modified files in GIT via batch file

setlocal enabledelayedexpansion
set output=
for /f %%G in ('git diff-tree --no-commit-id --name-only -r %1^^') do ( set output=!output! "%%G" )
git archive -o update.zip %1 %output%
endlocal

提交之间(顶部的变化)

setlocal enabledelayedexpansion
set output=
for /f %%G in ('git diff-tree --no-commit-id --name-only -r %2^^ %1') do ( set output=!output! "%%G" )
git archive -o update.zip %1 %output%
endlocal

您必须通过参数设置$ SHA