リポジトリ外の場所に「チェックアウト」することは可能ですか?つまり、「。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にチェックアウトが表示されます