リポジトリ外の場所に「チェックアウト」することは可能ですか?つまり、「。git」ディレクトリのないブランチのクローンです。
例:gitを使用してWebサイトを管理します。一部のファイルを編集し、WebDAV経由でWebサーバーにファイルをコミットしてコピーします。WebDAVパスは、リポジトリの外部の場所になります。リポジトリには「.git」を含めないでください。
これはgitがビルドされた問題ではないかもしれませんが、これは可能ですか?
リポジトリ外の場所に「チェックアウト」することは可能ですか?つまり、「。git」ディレクトリのないブランチのクローンです。
例:gitを使用してWebサイトを管理します。一部のファイルを編集し、WebDAV経由でWebサーバーにファイルをコミットしてコピーします。WebDAVパスは、リポジトリの外部の場所になります。リポジトリには「.git」を含めないでください。
これはgitがビルドされた問題ではないかもしれませんが、これは可能ですか?
回答:
はい、これは確かに可能です。
/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ホストにチェックアウトするコミット後フックを作成して、アップロードのスクリプトを作成できます。
ファイルだけが必要な場合は、を使用できます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
。
GIT_WORK_TREE=/destinationpath git checkout -f
現在のディレクトリがベアリポジトリの最上部、または.gitサブディレクトリにある間に実行するだけです。/ destinationpathにチェックアウトが表示されます