2

是否可以仅从远程 Git 存储库的单个修订中导出文件?在 Subversion 中,我们可以很容易地做到这一点:

svn export https://some.website.com/trunk/app/etc@5317 --username=user --password=pass  --force -r 5317 ./build/trunk/app

这只会给我在修订版 5317 中更改的文件,而不是其他文件。为什么这在 Git 中是不可能的?

注意:我已经阅读了 How to do a “git export”(如 “svn export”),但所有的答案都是指克隆整个存储库的一些变体。我不需要整个工作树。我只需要一些文件。我的存储库是 4.5 gigs,我的 FTP 构建系统托管在 VM 上,对入站收费并且磁盘空间有限。任何帮助表示赞赏。

4

4 回答 4

2

这只会给我在修订版 5317 中更改的文件,而不是其他文件。为什么这在 Git 中是不可能的?

它没有按钮,因为git fetch或者其他几种 git 方式更好,但是转储提交中更改的文件的全部内容是

git clone --no-checkout . ../scratch     # dirt cheap
( cd ../scratch
  git diff-tree --name-only -r commit^! | xargs git checkout commit -- 
  git ls-files | tar czTf - ../export.tgz
)
rm -rf ../scratch

git 进行最小获取的方法是从浅克隆开始。可以以事后的方式执行此操作,甚至可以完全避免在对象数据库中包含任何内容,但除非磁盘空间非常荒谬,否则从远程站点执行此操作的 git 方法是

git clone --depth=1 -b mainbranch u://r/l 

从那时起,就

git pull

保持最新

于 2013-11-25T17:03:24.070 回答
1

man git-archive

另请参阅此相关问题

之后,您可以做任何您想做的事情,例如:

git archive --remote=<repo> --output=repo-master.zip master
于 2013-11-25T16:15:54.087 回答
0

您可以使用此工具https://github.com/hegoku/git-export,安装它,当您想在两次提交之间将修改后的文件导出到文件夹时:

$ git-export -o /home/path_of_folder commit_1 commit_2

或者,如果您只想将修改后的文件从特定提交导出到文件夹:

$ git-export -o /home/path_fo_folder commit_1
于 2017-02-04T05:28:24.277 回答
0

使用--work-tree

这迫使您也使用--git-dir指向您的 .git 目录。 --git-dir=.git假设您在您的 git 文件夹中。您当然可以通过调整此文件夹从其他任何地方调用此命令。

以下将检出文件到您选择的任何目录。这不包括现有工作树中的任何本地(未提交)更改。它确实包括索引的变化(放在那里git add

git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  .

用于--source=HEAD忽略索引。

git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=HEAD  .

或者您可以使用--source指定您想要的任何提交(分支、标签、哈希)。

git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=my-tag  .

你甚至可以限制你的 git repo 中的一些路径

git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=HEAD:path/in/your/repo  .

如果您希望在 dest 文件夹中创建部分文件夹结构(用于子路径)

git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=HEAD:path/in/  your/repo

仍然只有出口path/in/your/repo。但创建目录/folder/into/which/to/export/your/repo

于 2021-09-15T21:04:32.763 回答