pushとかpullとかcloneとかする

現状、initしたディレクトリだけしかリポジトリが無いので、これをコピーしてみようというような話です。分散リポジトリシステムですからもちろんそういうのもいけるはず、だよね。

コピー先を作る

まあ今回は何となくテスト的なんで/tmpの下とかに掘ってみましょう

% mkdir -p /tmp/repos/html.git 

よくわからんが、ディレクトリに.gitという拡張子を付けるのがポイント。

で、対象にcdし、–bareを付けてinitするようです。

% cd /tmp/repos/html.git 
% git --bare init                                        
Initialized empty Git repository in /tmp/repos/html.git/

元ディレクトリに戻ります。

% cd /data/www/git/html

いよいよpushしてみます。

% git push /tmp/repos/html.git master         
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 588 bytes, done.
Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
To /tmp/repos/html.git
 * [new branch]      master -> master

いろいろとファイルが出来ているのだけど、とりあえずちゃんとコピーできたかどうか確認してみる。 ホームにでも

% cd $HOME # 別段cdでもいいですけど
% git clone /tmp/repos/html.git html.new                      
Initialized empty Git repository in /home/user/html.new/.git/

中を確認

% ls html.new   
test.html

html.newの中のtest.htmlを適当に編集

diff --git a/test.html b/test.html
index 201d7ea..dcdb407 100644
--- a/test.html
+++ b/test.html
@@ -6,6 +6,7 @@
   </head>
   <body>
     <h1>Test Page</h1>
+    <p>This is test html5 page.</p>
   </body>
 </html>
 <!-- vim:set ts=2 sts=2 sw=2 expandtab: -->

addしてcommitという一連の奴を一気にやるコマンド、git commit -aを使ってみました。

% git commit -a                                    
Created commit 614861b: add line
 1 files changed, 1 insertions(+), 0 deletions(-)

このままだと、コピーしてきたレポジトリにcommitしただけなので、cloneしてきた元に変更を反映する必要があり、これはgit pushで実現できます。コピーのときの最初に発動したのと同じですね(引数は違えど)。

% git push                                     
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 305 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/repos/html.git
   f085de9..614861b  master -> master

複数のマシンで使う

さて、今までやってきたのはlocal to localでしたが、ここでいよいよ別マシンにもrepositoryを分散します。

別ホストより

$ git clone host1:/tmp/repos/html.git/ html.new

とかやるわけです。host1というのは今までつついてきたマシン。これでレポジトリの内容をひっぱってこれますんで、例によって編集→commitを繰りかえします。

その後またしてもgit pushします

$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To saber:/tmp/repos/html.git/
   614861b..194b785  master -> master

んー、まあこれだけ。sshのパスが聞かれるかと思います。

もし、host1の方で変更がかかっていた場合はエラーになると思うので、その時は一度pullしてmergeした後pushします。

git/pushandpull.txt · 最終更新: 2012/04/07 10:32 (外部編集)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0