2012-02-09 26 views
0

I午前GTOはSVNはそう私の質問は、ということであるディレクトリ構造 gitのブランチとマージ

私は

mkdir git_repo 
cd git_repo 
git init --bare 
cd ../ 
git clone git_repo new_clone 
cd new_clone 
touch test.txt 
git add test.txt 
git commit test.txt 
git push origin master 
//So now the contents are in git_repo 
git branch new_branch 
git branch 
/*master 
*new_branch is the output */ 
git checkout new_branch 
//Switched to branch 'new' 

とgitの主なレポを作成を取得しようと取り組んできましたgit.Iに支店を理解トライン

1.How枝

からnew_repoするファイルをプッシュする

2.howをnew_cloneするためにスイッチバックします

私はこのケースで

6をマージ使用するのです

5.Whenをgit_repoするファイルをプッシュすることができ4.How 3.How iはnew_branchとnew_clone

beteenファイルに差分を見ることができます。new_branchとnew_cloneのファイルを別々に一覧表示するには

いずれか1つを例で説明してください。

おかげ..

答えて

0
  1. new_cloneが分岐ではありませんので、あなたは、 "new_cloneに戻す" ことはできません。あなたは、masternew_branchという2つのブランチを持つリポジトリを持っています。 「[リポジトリパス]に切り替える」とはどういう意味ですか?
  2. ここで質問するのは、に作成されたコミットを自分の作業コピーに取得するにはどうすればよいのですか?new_clone?答えはgit fetchで変更を取得し、git mergeまたはgit rebaseをローカルに組み込むことです(または両方を同時に実行するにはgit pull)。
  3. git diff new_branch new_clone。特定のファイルについては、git diff new_branch:path/to/file new_clone:path/to/file。 diff形式では、パッチ形式ではなく、git log --oneline --left-right new_clone...new_branchなどを使用してください。
  4. git push
  5. 1つのブランチの変更と履歴を別のブランチに組み込む場合は、マージを使用します。マージは非常に強力なコンセプトですが、SVNの基本的な考え方にはすでに慣れているはずです.2itでマージするリビジョン間の共通の祖先をよりよく考慮するため、gitはうまく機能する傾向があります。
+0

1.switch iはnew_cloneから変更を作りたいと思っていることを意味していない変更を行う支店2.howからレポしますブランチで、その後、あなたが好きな枝の上に自分を置くこと – Rajeev

+0

@Rajeev使用 'Gitのcheckout'をnew_cloneするプッシュします。 – Borealid

0

GITはSVNとは異なり、分散バージョン管理システムです。サーバーと複数のクライアントを持つSVNのように考えるのではなく、ピアツーピアの観点から考えてみましょう。

私は最初のご質問にお答えしましょう:

  1. バックの切り替え:

    をnew_cloneにスイッチバックの疑いがありません - new_cloneがリポジトリではなくブランチで、ブランチはマスターとnew_branchですgit branchのようになります。マスター(元のブランチ)に切り替える場合は、git checkout masterまたは一般にgit checkout <branch-name>を使用します。

  2. あなたは原点にブランチをプッシュする git push origin new_branchを使用することができます。

  3. で説明したように(1)はnew_clone分岐は存在しません。これを使用します。git diff new_branch master

  4. 見る(2)

  5. をあなたは、この場合には、マージは使用しないでください。しかし、あなたは2つの作業コピーを持っていて、あなたは他に一つのコピーから変更をマージするgitのマージを使用することができ、それらの間でコードを共有したいとしましょう。

すべての概念を理解するのに役立つフルランを見てみましょう。アリスとボブは、GITを使用している2人のユーザー(ピア)は次のとおりです。

はアリスとして2人のユーザーアリスとボブ

sudo adduser alice 
sudo adduser bob 

ログインを作成し、ボブと

su alice 
git config --global user.name "Alice" 
git config --global user.email [email protected] 

ログインを設定し、

を設定します
su bob 
git config --global user.name "Bob" 
git config --global user.email [email protected] 

アリスがGITリポジトリを作成する

mkdir project 
cd project/ 
git init 
echo "Some text" > test 
git add test 
git commit -m "Adding test" 
git status 

ボブクローンを、編集し、変更をコミット

cd ~ 
git clone /home/alice/project myclone 
cd myclone/ 
git log # See the changes from Alice 
echo "Some text - edited by Bob" > test 
git commit -m "Making changes to test" -a 
git diff 

アリスは

git remote add bob /home/bob/myclone 
git fetch bob 
git branch -a # To list 
git log -p master..bob/master 
git merge --no-ff bob/master # Merge changes from Bob 

アリスは実験的なブランチの変更を行い、それをコミットボブから変更をマージします。

git branch experimental 
git branch # To list 
git checkout experimental 
git branch # To list 
echo "Some text - edited by Bob, further edited by Alice" > test 
git commit -m "Further modifying test" -a 
git checkout master 
git log -p master..experimental 
git merge --no-ff experimental 
git branch -d experimental # To delete the branch 

ボブは変更を引っ張る:

git pull 

ここで中央サーバーはありません。アリスとボブはピアです。ここ

詳細:

関連する問題