使用Git(ver 1.7),SourceTree(ver 1.5.1.0),最好是.NET(C#)
如何从commit C获取所有已提交的源代码 - >只提交G?注意:我不想获得整个代码库,只需要提交已提交的文件。
示例提交历史记录
A - > B - > C - > D - > E - > F - > G - > H - >我
尝试切换到Git,但要求是我们需要一个自动化的过程来获取我们的发布过程的源代码。文档。
答案 0 :(得分:1)
使用
git diff-tree --name-only -r C~..G
获取所需提交范围内所有已修改文件的列表(使用C~
,因为您似乎希望包含在提交C中进行的更改而不是列出更改,因为 C),然后为每个文件运行git show
以在该范围的最后一次提交中列出其内容。
for f in $(git diff-tree --name-only -r C~..G) ; do git show G:$f ; done
(假设有一个Bourne类型的shell。如果你在Windows上,可以使用cmd.exe。)
要将文件解压缩到单独的目录树中而不是将它们转储到终端,这应该执行:
for f in $(git diff-tree --name-only -r C~..G) ; do
mkdir -p DESTINATION/$(dirname $f) && git show G:$f > DESTINATION/$f
done
答案 1 :(得分:0)
git format-patch C..G
怎么样?这将为您提供已编辑的差异列表,其中列出了所有已更改的文件以及两次提交之间对每个文件所做的更改。根据您的工作流程,您可以从C#启动git进程,shell,或者可能使用其中一个git库(我不确定C#是否支持创建补丁)。
补丁程序非常易读,不会对人类不友好,可以应用于代码的另一个副本,包含在文档中,用于一般统计数据或其他任何内容。
我相信您可以为每个提交生成一个补丁或一个补丁,具体取决于您的流程的详细程度。 Git还可以生成有关更改的电子邮件,以便发送。
答案 2 :(得分:0)
感谢Magnus和James Ehly我得到了我想要的东西。这会将提交范围(C到G)中的文件复制到tar文件中。注意:这只会提交文件。不是整个存储库。
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT C~..G | xargs tar -rf myTarFile.tar
-r - >递归到子树
- no-commit-id - > git diff-tree在适用时输出带有提交ID的行。此标志禁止提交ID输出。
- 仅限名称 - >仅显示已更改文件的名称。
- diff-filter = ACMRT - >仅选择这些文件。 See here for full list of files
C..G - >此提交范围内的文件
C~ - >包括Commit C中的文件。不仅仅是自Commit C。
以来的文件| xargs tar -rf myTarFile - >输出到tar