我正在设置一个通用的git部署环境,我想知道在.git
目录中设置符号链接是否安全?通过这样做,我希望能够从同一个仓库中进行单独检查,而无需拥有潜在大型项目历史的本地副本。
推理(伪流):
ln -s ./deploy/.git ./build/.git
cd build
git fetch
git checkout some_commit
make
cd ..
mv build deploy
make deploy
//只需重置nginx,apache等答案 0 :(得分:3)
查看git-new-workdir
,这是一个专门用于从一个.git目录中检出多个工作目录的工具。
答案 1 :(得分:1)
如果您在本地克隆git存储库,.git
目录将使用硬链接。所以你不需要担心空间,至少对于新近克隆的存储库来说。
$ du -chs repo/.git
27M repo/.git
27M total
$ git clone repo repo2
$ du -chs repo2/.git
27M repo2/.git
27M total
$ du -chs repo/.git repo2/.git
27M repo/.git
292K repo2/.git
27M total
由于git缓存了有关工作副本的信息,因此我对符号链接git目录持谨慎态度。
答案 2 :(得分:0)
在您描述的情况下,将.git
目录符号链接是安全的。 (如果你在带有符号链接.git
的目录中使用git,它可能会让人感到困惑,因为索引(或暂存区域)将在两者之间共享。)
但是,您不需要为所需内容执行此操作 - 而是可以使用选项git checkout
和--git-dir
运行--work-tree
来告诉git哪个存储库目录和工作树使用。例如:
mkdir /home/whatever/build/
git --git-dir=/home/foo/deploy/.git --work-tree=/home/foo/build/ checkout -f
我建议(a)对这两个选项使用绝对路径,(b)使用这两个选项中的任何一个,或者两个都不使用,因为否则目录git实际使用的规则可能会令人困惑。