2009-05-12 16 views
29

rsync -aまたはcp -Rを使って追跡されたフォルダのコピーを作成した場合、そのコピーをgit cloneのように使用することができますか、それとも奇妙な問題が発生しますか?これはすべて自分のコンピュータで実行されているので、誰もリポジトリにアクセスしていません。コピーされたgit repoを使うのは安全ですか?

明らかに、git-clonedディレクトリはどこからコピーされたかを知っているので、ソースを指定せずにgit pullを実行できますが、私がそれを使わずに喜んでいると仮定すると、

実験として小さなプロジェクト、cloneがあり、rsyncが作成され、結果のフォルダがdiff作成されました。結果は次のとおりです。

[email protected] ~ 
$ git clone project/.git project2 
Initialized empty Git repository in /home/itsadok/project2/.git/ 

[email protected] ~ 
$ rsync -a project/ project3/ 

[email protected] ~ 
$ diff -r project2 project3 
Only in project3/.git: COMMIT_EDITMSG 
diff -r project2/.git/config project3/.git/config 
7,12d6 
< [remote "origin"] 
<  url = /home/itsadok/project/.git 
<  fetch = +refs/heads/*:refs/remotes/origin/* 
< [branch "master"] 
<  remote = origin 
<  merge = refs/heads/master 
Files project2/.git/index and project3/.git/index differ 
diff -r project2/.git/logs/HEAD project3/.git/logs/HEAD 
1c1 
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131284 +0300  clone: from /home/itsadok/project/.git 
--- 
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131066 +0300  commit (initial): first commit 
diff -r project2/.git/logs/refs/heads/master project3/.git/logs/refs/heads/master 
1c1 
< 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131284 +0300  clone: from /home/itsadok/project/.git 
--- 
> 0000000000000000000000000000000000000000 bf6be23d68d0ede45aca7479795693bfba76e73a itsadok <[email protected](none)> 1242131066 +0300  commit (initial): first commit 
Only in project2/.git/logs/refs: remotes 
Only in project2/.git: packed-refs 
Only in project2/.git/refs: remotes 

かなりの違いがありますが、そのほとんどは原点を基準にしているようです。私は正しい?

+0

を私は答えを知らないが、私はそれは大丈夫だろうと思いたいです。私はあなたがなぜ必要としているのか非常に不思議です。 –

+1

私はいくつかの変更を加えたバックアップフォルダと、今度はsshdを持っていないNATの背後にあるWindowsマシン上にあるレポをクローンしたいときに、もう2回、私の必要性が出てきました...しかし、主に、gitの仕組みをよりよく理解したいと思っています。 – itsadok

答えて

27

安全です。

"git clone"を使うことの違いは、オリジナルリポジトリを自動的に設定することで、 "git pull"と "git push"を使って2つのリポジトリを簡単に同期できることです。また、 "git clone"は、リポジトリにローカルなログ、インデックス、その他の設定をコピーしません。これは、リポジトリのバージョン履歴をコピーするだけです(そして、これはバイトレベルで別々に保存することもできます。なぜなら、Gitは今のところ「git gc」を使用しているときにデータベースを圧縮するからです)。

これらの相違点は、rsncが作業ディレクトリのインデックス、ログをコピーしたためで、rsync-copyがリモートの原点を設定しなかったためです。リポジトリにローカルな構成ファイルとログファイルは非常に多くあります。しかし、バックアップを復元する場合や、リポジトリを別のディレクトリ/ハードドライブ/マシンに移動する場合など、直接コピーすることは危険です。それはまったく同じだ

+2

これを置く別の方法は、git cloneが実際には同じマシン上のリポジトリを複製するときに "objects"ディレクトリを完全に複製するということです。単にcpioを使用してすべてをコピーし、 destinationは同じファイルシステムです。とにかくオブジェクトディレクトリの外にあるものはすべてローカル情報です。それらを再作成するのではなく、卸売り(a la cp -R)をコピーするだけです(gitクローンが行うことです)は、かなり安全です。コピーされたフックはあまりにも奇妙なことはしません。 – araqnid

4

あなたは誰か他の人の リポジトリのクローンを作成すると、お使いの コンピュータに基本的にはコピー このディレクトリの内容。

本当に良いからGit Internals (Scott Chacon) from Peepcode Press。 (Page 44) 私が心配している限り、起源への参照が欠けている/私は参照してください。

よろしくお願いいたします。

+3

私は、ピードコードではなく、ピープコードを意味すると思います。 :) –

1

、よく、ほとんど、あなたが「プロジェクト3」で同じことをしたい場合だけ実行します。

git remote add origin /home/itsadok/project 
git branch -f master origin/master 
関連する問題