如何才能从Git中只获取已提交的源代码

本文关键字:获取 提交 源代码 Git | 更新日期: 2023-09-27 17:59:47

使用Git(版本1.7)、SourceTree(版本1.5.1.0),最好使用.NET(C#)

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

提交历史示例

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

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

如何才能从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

(假设是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

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

补丁程序是非常机器可读的,对人类不友好,可以应用于代码的另一个副本,包括在文档中,为一般统计数据挖掘,或任何其他东西。

我相信你可以生成一个补丁,或者每个提交一个,这取决于你的流程有多详细。Git也可以生成一封关于更改的电子邮件,然后发送出去。

感谢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

git-diff-tree手动页面

-r-->递归到子树

--如果适用,no-commit-id-->git-diff树会输出一行带有提交id的行。此标志抑制了提交ID输出。

--name only-->仅显示更改文件的名称。

--diff-filter=ACMRT-->仅选择这些文件。请参阅此处查看文件的完整列表

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

C~-->包括Commit C.中的文件,而不仅仅是Commit C.之后的文件。

|xargs tar-rf myTarFile-->输出到tar