2

そのため、ローカルホストから VPS にリポジトリをプッシュしようとしています。

vps に --bare リポジトリをセットアップし、localhost にリポジトリをセットアップしました。

次のコマンドを使用して VPS にプッシュしました。

# git remote add origin ssh://root@mysite.net/home/mysite/public_html/mygit/.git
# git push origin master

正常にプッシュされますが、VPS .git からファイルをチェックアウトする必要があります。しかし、「git checkout」を実行しようとすると、エラーが発生します。

致命的: この操作は作業ツリーで実行する必要があります

.git 構成ファイルを編集して、次の行を編集/追加しようとしました。

[core]
bare = true
worktree = /home/mysite/public_html/mygit/

[receive]
denycurrentbranch = false

これにより、git コマンドを実行できますが、ファイルはチェックアウトされず、git はファイルが削除されたことを通知します。

私は少し混乱しています。これについてどうすればいいですか?

4

1 に答える 1

5

裸のリポジトリでチェックアウトを実行しようとするのは非常に非論理的です -checkout作業コピー/ツリーを更新するためのコマンドです:

git-checkout - 作業ツリーへのブランチまたはパスをチェックアウトします

ベア リポジトリには作業ツリーがありません。

通常の方法で git リポジトリを設定する

ゼロから始めて、自宅/オフィスのコンピューターを使用していると仮定しましょう。

ベアレポを作成する

プロジェクトのベア リポジトリを作成するか、既存のリポジトリを適切な場所に移動します。

ssh root@mysite.net
cd repos
mkdir repo.git ##give it a better name
cd repo.git
git init --bare

サイトのクローンを作成する

ssh root@mysite.net
cd /home/mysite/public_html
git clone ~/repos/repo.git .

ローカル クローンを作成する

cd mylocalsite/public_html
git clone root@mysite.net:repos/repo.git .
git push/pull etc.

サイトを自動的に更新する

目標は自動的に更新することなので、リポジトリにプッシュするたびに git-hooks を使用して、ライブ サイトである作業コピーを更新できます。

簡単な例を次に示します。

#!/bin/sh
cd /home/mysite/public_html
git --git-dir /home/mysite/public_html/.git pull > /dev/null

として保存し/home/root/repos/.git/hooks/post-receive、実行可能にします。プッシュするたびに、プルを発行してライブサイトを更新しようとします

また

ベア リポジトリの使用をやめて、ライブ サイトのチェックアウトをメイン/唯一のリポジトリとして使用できます。これはお勧めできませんが、そうする場合は次のようにします。

git remote add live root@mysite.net:/home/mysite/public_html/.git
git push live master

現在チェックアウトされているブランチの更新に関するエラーが表示されます。警告を読み、その意味を理解してください。それでもこれをやりたいと決めた場合は、次の操作を許可できます。

ssh root@mysite.net
cd /home/mysite/public_html
git config receive.denyCurrentBranch ignore

繰り返しますが、お勧めしません。ベア リポジトリを用意し、ライブ サイトを通常のチェックアウトとして維持する方がはるかに優れています。

于 2012-09-21T09:29:52.343 に答える