2012-01-17 1 views
1

はプッシュを経由して左から右へ旅行する私のコードです:Git:ローカルワークフローをリモートワークフローに設定しました。リモートのファイルはどこにありますか?私は一言で言えば探しています何

local machine -> bare remote repository -> full remote repository 

注:裸のレポがいっぱいレポと同じマシン上にあります。フルレポは、共有ホスト上の私のライブサイトでもあります。

これのためのすべての要件を実行した後、私の完全なリポジトリ内の私のサーバー上に作成されたファイルは絶対にありません。 gitはこれを行うのですか?私はgitに新しいので、多分私は何かを台無しにしました。私が行ったことは以下の通りです。ここで


は、コードを終了すると、ディレクトリにいる間、私は私のローカルマシン上で何をやったかです:

$ git init 
$ git add . 
$ git commit -m "Initial commit" 

リモートマシン上で、ここで私は裸のレポのためにやったことだが:

$ git push exampleserver master 
$ git remote add exampleserver ssh://[email protected]/~/www/example.git 
$ git push exampleserver master 
:ローカルマシンへ
$ mkdir -p $HOME/www/example.git 
$ cd $HOME/www/example.git 
$ git --bare init 

戻る、私はこれをしませんでした

$ mkdir -p $HOME/www/example.com 
$ cd example.com 
$ git init 
$ git remote add bare $HOME/www/example.git 
$ cd $HOME/www/example.git/hooks/ 

裸のレポでhooksディレクトリに、私はと呼ばれる実行可能なシェルスクリプトを作成しながら「更新後:

戻るリモートマシンに、完全なレポ/ライブウェブサイトをセットアップするために、私はこれをやりました「と、それは次のようになります。

#!/bin/sh 
cd $HOME/www/example.com 
unset GIT_DIR 
git pull bare master 

exec git-update-server-info 

を最後に、私のローカルマシン上でのコーディング終了時に、私は次の操作を行います。

$ git push exampleserver master 

この戻り」すべてがアップツーです日付'。

+0

私は "裸のリモート"ものは得られません。なぜあなたのローカルマシンに "裸のリモート"が必要ですか?サーバーにプッシュして、仲介者を取り除いてください。 – vocaro

+0

実際にプッシュされたものがあれば 'post-update'フックが実行されると思います。変更をプッシュするとどうなりますか? –

+0

@vocaro:決して*非裸のリポジトリにプッシュしないと、悪いことが起こります。 –

答えて

1

プッシュが「すべて最新です」と表示された場合、フックは更新されていないため呼び出されません。 @ysdxによって指摘されているように、標準出力は転送され、echoを使用して追加情報を出力することができます。

だから、実際の変更のプッシュは、次のようになります。

Counting objects: 5, done. 
Writing objects: 100% (3/3), 244 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
remote: /git/server /git/remote 
remote: From ../remote 
remote: * branch   master  -> FETCH_HEAD 
remote: Updating e10977b..21d83ca 
remote: Fast-forward 
remote: test.txt | 2 +- 
remote: 1 files changed, 1 insertions(+), 1 deletions(-) 
remote: /git/remote 
To ../remote 
    e10977b..21d83ca master -> master 

あなたがフックから呼び出されたプルからの出力を見ることができます。実際、 'remote:'で始まるすべての行はフックから転送されます。その後、他の

Counting objects: 5, done. 
Writing objects: 100% (3/3), 243 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To ../remote 
    21d83ca..aac857c master -> master 

ディレクトリの変更のためにそのおそらく価値が使用してのpushd/POPDこと:あなたのフックが呼び出されなかった場合は、このような出力になるだろう一方。私は基本的に上記の出力を生成するのと同じスクリプトを使用しました:

pushd ../server 
unset GIT_DIR 
git pull remote master 
popd 

exec git update-server-info 
+0

ローカルマシンからプッシュすると、「すべてが最新です」と言われます。多分私はコミットする必要がありますか? –

+0

また、ローカルマシンからのプッシュを行うとgitが新しいファイルや編集したファイルを私のライブサーバーディレクトリ($ HOME/www/example.com)にコピーすることを期待しています。 scpや何かに? –

+0

あなたが変更を加えるたびに、まずそれらの変更を追加してから、 'git commit'してからそれらをサーバーに 'git push'する必要があります。プッシュはコミットを認識しているだけなので、(一般的に)コミットされたものだけをプッシュできます。 Commitは(一般的に)インデックスにあるものだけを認識します。作業ディレクトリからインデックスに変更を加えるにはaddを使います。 – Chris

関連する問題