C# 我怎样才能从Git获得提交的源代码?

C# 我怎样才能从Git获得提交的源代码?,c#,.net,git,atlassian-sourcetree,C#,.net,Git,Atlassian Sourcetree,使用Git 1.7版、SourceTree 1.5.1.0版,最好使用.NET C 如何从commit C->to commit G Only获取所有提交的源代码?注意:我不想得到整个代码库,只想得到提交的文件 提交历史记录示例 A->B->C->D->E->F->G->H->I 试图切换到Git,但要求是我们需要一个自动过程来获取发布过程和文档的源代码。怎么样?这将为您提供一个编译的、不同的列表,其中列出了在两次提交之间更改的所有文件以及对每个文件所做的更改。根据您的工作流程,您可以从C启动g

使用Git 1.7版、SourceTree 1.5.1.0版,最好使用.NET C

如何从commit C->to commit G Only获取所有提交的源代码?注意:我不想得到整个代码库,只想得到提交的文件

提交历史记录示例

A->B->C->D->E->F->G->H->I

试图切换到Git,但要求是我们需要一个自动过程来获取发布过程和文档的源代码。

怎么样?这将为您提供一个编译的、不同的列表,其中列出了在两次提交之间更改的所有文件以及对每个文件所做的更改。根据您的工作流程,您可以从C启动git进程、shell out,或者可能使用其中一个git库。我不确定C库是否支持创建修补程序

补丁程序是相当机器可读的,而不是对人类不友好的,并且可以应用于代码的另一个副本,包括在文档中,为一般统计数据或任何其他事情而挖掘

我相信您可以生成单个补丁,或者为每个提交生成一个补丁,这取决于您的过程有多详细。Git还可以生成更改的电子邮件,并发送出去

使用

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
假设为伯恩型壳。如果您使用的是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
多亏了马格纳斯,我得到了我想要的东西。这将把范围从C到G的文件复制到一个tar文件。注意:这将只获得提交的文件。不是整个存储库

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT C~..G | xargs tar -rf myTarFile.tar
-r->递归到子树中

-无提交id->git diff树在适用时输出一行提交id。此标志禁止提交ID输出

-仅名称->仅显示已更改文件的名称

-diff filter=ACMRT->仅选择这些文件

C..G->此提交范围内的文件

C~->包括来自Commit C的文件。不仅仅是Commit C之后的文件


|xargs tar-rf myTarFile->outputs to tar

获取所有提交的源代码的含义并不十分清楚。您希望C-to-G增量作为修补程序还是此范围内的提交所涉及的完整文件?或者只是修改文件的名称?此范围内的完整文件。不是三角洲,塔克·马格纳斯。这让我走上了正确的方向。我无意中得到了一份工作。具体来说,dirname一直给我一个“command not found error”。我最终使用了:git diff tree-r-no commit id-name only-diff filter=ACMRT C~…G | xargs tar-rf myTarFile.tar