2011-09-15 10 views
1

一般的なgitデプロイメント環境をセットアップしていて、.gitディレクトリへのシンボリックリンクを設定するのが安全かどうか疑問に思っていますか?そうすることで、潜在的に大規模なプロジェクトの履歴のローカルコピーを持たなくても、同じリポジトリから別々のチェックアウトを行うことができるようになります。`.git`ディレクトリをビルドにリンクすると危険がありますか?

推論(擬似フロー):

  • Webインタフェース:
    • クリックして "これはこのサーバにコミット展開する"
  • サーバー:
    • ln -s ./deploy/.git ./build/.git
    • cd build
    • git fetch
    • git checkout some_commit
    • make
    • 成功の場合:
      • cd ..
      • mv build deploy
      • make deploy //失敗場合だけnginxのは、Apacheなど
    • をリセット
      • 警告ユーザー
      • は害は、ツール専用の1つの.gitディレクトリから複数の作業ディレクトリをチェックアウトするためにgit-new-workdirをチェック

答えて

3

を行わない、ビルドディレクトリを拭いてください。

+1

git-new-workdirはgitのcontrib /フォルダー内にあります。多くのgitインストーラはあなたのディスクのどこかにこのフォルダを落としますが、もしあなたがそれを持っていなければ、git.gitリポジトリをクローンしてそこから取得できます。 –

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ディレクトリのシンボリックリンクに注意しています。

0

説明した状況で.gitディレクトリをシンボリックリンクすることは安全です。 (シンボリックリンク.gitでディレクトリ内のgitを使用していた場合、インデックス(またはステージングエリア)が両者で共有されるため、混乱するかもしれません)。

しかし、あなたはそうする必要はありませんあなたが望むものではなく、代わりにオプションを--git-dir--work-treeで実行して、gitにどのリポジトリディレクトリと作業ツリーを使うかを伝えることができます。例えば:

mkdir /home/whatever/build/ 
git --git-dir=/home/foo/deploy/.git --work-tree=/home/foo/build/ checkout -f 

I(a)は、これらのオプションの両方のために絶対パスを使用してGitは実際に使用するディレクトリいるさもなければルールが混乱することができるので、(b)は、これらのオプションの両方、またはそれらのいずれもいずれかを使用して示唆しています。

関連する問題