使用git存储库或tar归档的rsync
问题描述:
我有一个git存储库,我想将某个特定的版本库修改为一个目录。基本上我想这样做:使用git存储库或tar归档的rsync
$ cd my-git-repo
$ git archive $MY_COMMIT > ~/blah.tar.gz
$ mkdir ~/tmp
$ cd ~/tmp
$ tar xf ~/blah.tar.gz
$ rsync -a ~/tmp/ ~/final-destination
$ cd
$ rm -r tmp
这个问题是它需要解压缩到一个临时目录并从那里rsyncing。这在理论上是不必要的,而且一个巨大的git仓库需要很长时间,并且需要大量的可用空间。我不只是想直接清除〜/最后目的地和焦油到它:
$ git archive $MY_COMMIT | tar x -C ~/final-destination
,因为这还需要大量的不必要的工作,尤其是在〜/最后目的地是远程目录。另一种选择是直接从版本库中签出特定的版本和rsync:
$ git checkout $MY_COMMIT
$ rsync -a --exclude .git my-git-repo/ ~/final-destination
但我宁愿不要惹惹版本库的工作目录。我想在一个可能在后台运行的脚本中执行所有这些操作,而我正在执行存储库中的任务。
所以。有没有一种方法可以直接从版本库的特定版本中进行rsync。或失败,我可以以某种方式从tar归档rsync,而不必提取它?
答
如果你不想rsync
你的工作树的,我怕你坚持解压到一个临时目录第一。 (虽然当我说的那种对堆栈溢出的东西,难免有人想出了更多的东西巧妙的:))
有一两件事你可以尝试是藏匿更改,签出你想要的承诺,rsync的,切换回以前的分支然后再弹出的藏匿处:
set -e
git stash
git checkout $MY_COMMIT
rsync -a --exclude .git ./ ~/final-destination
git checkout -
git stash pop
(我没有测试过,我要提醒你。)
你试过'混帐推/ pull'或'git的格式补丁/ am'(在这种情况下,远端应该也是git repo)? – jfs 2011-04-29 07:30:42