Gitファイルをリポジトリ外の場所にチェックアウトする


21

リポジトリ外の場所に「チェックアウト」することは可能ですか?つまり、「。git」ディレクトリのないブランチのクローンです。

例:gitを使用してWebサイトを管理します。一部のファイルを編集し、WebDAV経由でWebサーバーにファイルをコミットしてコピーします。WebDAVパスは、リポジトリの外部の場所になります。リポジトリには「.git」を含めないでください。

これはgitがビルドされた問題ではないかもしれませんが、これは可能ですか?

回答:


19

はい、これは確かに可能です。

/srv/production.git宛先システム/サーバーに名前の付いた裸のリポジトリがあるとしましょう。

宛先システムでは、次のコマンドを使用できます cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

私が非裸のリポジトリにいる場合、コマンドは少し異なります。に非ベアリポジトリがあるとしましょう/srv/testing。私が使用することをチェックアウトするにはcd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

実際、私のシステムでは、production.gitリポジトリのpost-commitフックでこれを自動化します。したがってproduction.git、最新バージョンにプッシュすると、自動的にWebルートにチェックアウトされます。

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

リモートシステムへの唯一のアクセスがwebdavである場合、直接または一時的な場所にwebdavホストにチェックアウトするコミット後フックを作成して、アップロードのスクリプトを作成できます。


複数の場所で検索。
karthikeayan

6

ファイルだけが必要な場合は、を使用できますgit archive。通常は、tarballやZIPなどのアーカイブに書き込みますが、パイプすることもできます。

git archive master | tar -x -C /some/path

ここで、master明らかにアーカイブしたいブランチ/some/pathがあり、ファイルのみが含まれます-no .gitまたは.gitignore


またはgit checkout-index、ファイルの「チェックアウト」により近いものを使用できます。

git checkout-index -f -a --prefix=/some/path/

ここでは、-aオプションはgitすべてのファイルをチェックアウトするように指示します。プレフィックスは出力の先頭に追加されます。誰かがこれ包むラッパーを書いてgit export


2
これを必要以上に難しくしていると思います。GIT_WORK_TREE=/destinationpath git checkout -f現在のディレクトリがベアリポジトリの最上部、または.gitサブディレクトリにある間に実行するだけです。/ destinationpathにチェックアウトが表示されます
ゾレダッケ

わかりました、どうにかしてそのオプションを見逃していたに違いありません。
slhck

1
正直に言うと、このオプションの方が直感的です。また、エラーが発生しにくくなります。
Minixの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.