繁体   English   中英

如何仅从Git获取提交的源代码?

[英]How can I get only the commited source code from Git?

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

如何从提交C->仅提交G获得所有已提交的源代码? 注意:我不想获得整个代码库,而只是想要提交的文件。

提交历史记录示例

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

尝试切换到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型外壳。如果您使用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怎么git format-patch C..G 这将为您提供两次提交之间所有已更改文件以及对每个文件所做的更改的已编译差异列表。 根据您的工作流程,您可以从C#开始git进程,外壳化,或者可能使用其中一个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-tree在适用时输出带有提交ID的行。 该标志禁止提交ID输出。

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

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

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

C〜->包括Commit C中的文件。不仅仅是Commit C之后的文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM