2012-02-09 197 views
0

我试着GTO理解分支git.I已经与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主回购我的问题是,工作

1.How切换回new_clone

2.how推文件从分支到new_repo

我3.How可以看到中DIFF在高炮和new_branch new_clone

4.How可我把文件中的文件git_repo

5.当我使用在这种情况下合并

6 。如何列出new_branch和new_clone文件分别

任何一个可以请用实例说明这些。

谢谢..

回答

0
  1. 你不能 “切换回new_clone”,因为new_clone不是一个分支。您有两个分支的存储库,名为masternew_branch。什么“切换到[版本库路径]”是什么意思?
  2. 我想你的意思要问这里是什么“我怎么找回提交将git_repo做成我的工作拷贝在new_clone?”答案是你做一个git fetch检索变化,git mergegit rebase本地将其纳入(或git pull在一次操作中做两件事)。
  3. git diff new_branch new_clone。对于特定的文件,git diff new_branch:path/to/file new_clone:path/to/file。对于变更集而言,不是补丁格式,请使用git log --oneline --left-right new_clone...new_branch等。
  4. git push,因为你已经做了。
  5. 使用合并时,要结合一个分支的变化和历史到另一个分支。合并是一个非常强大的概念,但是您应该已经熟悉SVN的基本想法 - 但git往往更好,因为它更好地说明即使在双向合并的修订版本之间的共享祖先。
+0

1.开关来回购意味着我要拍从new_clone的变化,而不是从它的分支2.how做出改变在分支中,然后推送到new_clone – Rajeev 2012-02-09 06:10:02

+0

@Rajeev使用'git checkout'将自己放在你喜欢的任何分支上。 – Borealid 2012-02-09 13:55:19

0
GIT

不同于SVN - 它是一个分布式版本控制系统。不要把它看作像服务器和多个客户端的SVN,相反它有助于从对等的角度来思考它。

让我先回答你的问题:

  1. 切换回:

    没有切换回new_clone问题 - new_clone是一个存储库,而不是一个分支,该分支是掌握和new_branch如git branch所列。如果要切换到主人(原始分支),请使用:git checkout master或一般git checkout <branch-name>。可以使用git push origin new_branch将分支推送到原点。

  2. 如(1)所述,没有new_clone分支。使用此:git diff new_branch master

  3. 见(2)

  4. 你不使用在这种情况下合并。但假设你有2个工作副本,并且你想在它们之间共享代码,你可以使用git merge将变化从一个副本合并到另一个副本中。

让我们看一个完整的运行,以帮助您了解所有的概念。 Alice和Bob的用户(对等),谁正在使用GIT:

创建2个用户Alice和Bob

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] 

Alice创建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 

请注意,这里没有中央服务器,Alice和Bob是同级。

更多细节在这里: