轻松使用SourceTree进行代码版本管理

作者: Hermione__Hu | 来源:发表于2016-02-19 16:05 被阅读16890次

以前刚刚接触SourceTree的时候,觉得很简单,遇到冲突了去包文件里面删掉那些明显的标记,然后在谁也不知道谁删掉了谁的文件的情况下,只要不报冲突就算是自己给自己的版本推上去了,这样明显不是SourceTree的初衷
(其实我以前就是这么干的...现在觉得自己还是too young too naive...)
幸好,在我的老大Thomas的指引下,和我的好同事Poul的共同探讨+实践下,应该算是弄明白了SoucreTree的使用

大家都知道git是分布式的代码管理工具,理论上面大家都明白,可是实践高于理论,那么请尝试着采用以下的方法来理解它的原理吧!

准备工作

第一步:创建自己的本地分支

(服务器配置工作暂时不说了,这不是本文的重点)

你需要打开SourceTree,注意右侧BRANCHES,REMOTES,(如果你是第一次使用SourceTree的话,这个BRANCHES的类目下面基本上只有一个master,这个master是本地的master,REMOTES这个类目下也有一个master,这是服务器远端的master)

关键点:我们在BRANCHES这个类目下新建一个branch
方法如下图:

317264EB-EF22-4EDA-8E3F-2FB18085A37A.png

为了代码管理的方便,我们尽量遵循

  • 只能让本地的master向远端的master进行提交工作
  • 忽略工程中二进制文件的改动(建议将二进制文件与代码文件区分路径存放,这样在暂存的文件中我们比较容易识别出哪些文件可以不进行commit,以避免不必要的冲突)
  • 还有不得不说的是,尽量在提交和合并的时候完全Quit出XCODE

工作流程

上班第一件事:merge

上班第一件事就是从服务器拉取其他同事的代码到本地进行merge
我们所要做的就是按照如下进行:

  1. 右击自己新建的DEV,选择checkout到master上,(如果已经是master就不需要切换了----如何分辨出当前在哪个分支下?答:当前的分支是粗黑体)中文版本为检出到master
  2. 然后点击fetch,从远端获取最新动态
  3. 然后点击merge,选中到最新的节点,OK即可
  4. 最后再checkout到自己新建的DEV,右击master选择merge master into DEV

这样就完成了合并代码

下班最后一件事:commit

务必记住在开始代码编写工作前请先checkout到DEV,直到工作完成,我们来commit代码

  1. commit自己写的的文件,这样自己的文件就被提交到了自己的DEV分支中
  2. checkout到master,然后右击DEV,选择merge DEV into master
  3. 将working space中不需要commit的文件或者需要解决冲突的文件discard掉
  4. push到远端即commit成功
  5. 注意提交成功后切换到DEV

最后附上一些参考资料,感兴趣的可以看看

中英文版本的GIT Document

感谢你们!


2016.2.24补充:
当我编写代码完成,发现远端有新动态,此时的操作:

  1. 先将Working Copy中需要commit的文件commit到DEV上(在comment区域做上自己的版本注释)
  2. 切换到master上,选择merge DEV into master(此时SourceTree会告诉你,你当前落后了多少超前了多少,如果没有这样的提示,就fetch一下远端)
  3. 进行merge(将本地的master与远端的master进行合并)
  4. 没有问题,push到远端
  5. 切换到DEV,选择merge master into DEV

2016.3.2补充一:
除了使用merge的方式和代码,还有一种是rebase,探索中......
2016.3.2补充二:(IMPORTANT----可有效避免冲突的发生频率)

E5A8EE98-853A-4888-AB1B-40B4C6834B8F.jpg

在SourceTree的设置中,如上图修改文件为以下文件

Mac OSX

*.DS_Store

Xcode

*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcuserstate
project.xcworkspace/
xcuserdata/

#Git
.gitingore
.gitingore.swp


2016.3.8补充:
尽量不要使用pull,我的理解是pull是一种强制将远端拉取下来,所以尽量使用fetch吧,这样才能更好的合代码
另外,在遇到冲突时,可以进workingcopy去看看是什么文件冲突,右边会有红绿色块,并且也会有冲突标记,在这里,你可以进行选择性discard(丢弃)不需要的代码来解决冲突

按照上述的工作方式,我已经和同事合作了一段时间,效果还不错,给我们的工作带来很多便利
如果有任何问题可以问我,我尽量解决~O(∩_∩)O

相关文章

网友评论

  • 梁森的简书:每次提交前都应该pull吧?
  • ian丶沈:哥们。。rebase 探索的怎么样了
  • 刘超_a594: 用了几天 用的想兔血 xcworkspace the file couldnt be opened 这个冲突解决了 但是为什么还是打不开呢
    Hermione__Hu:@刘超_a594 要与同事协调好使用方法,对方的代码尽量不要去改动,只改自己的代码,然后就是先多多理解其中的原理,有很多大神写的思路很清晰,可以多看看,明白之后就好说了
    刘超_a594:@Hermione__Hu 过了好久了,瞎弄搞好了,还是不怎么会用git
    Hermione__Hu:@刘超_a594 貌似是比较严重的冲突,有没有去show package contents里面去看文件,如果文件里还有冲突的标记,你要删掉再看看
  • d2ba60203f8a:服务器是新建的,我Clong下仓库的后拖项目进去,但是SourceTree并没有检测到可提交内容,Xcode自带一个Git,SourceTree也有一个内置版本的Git,是否和选择Git有关,如果想使用系统安装的Git,如何找到Git所在目录,我在bin目录下看到有git文件,但是不知道选择哪一个。
    Hermione__Hu:@呆若木鱼 :v:
    d2ba60203f8a:@Hermione__Hu 把库删掉 从新clone就好了...并没有做任何其他操作...
    Hermione__Hu:@呆若木鱼 和选择哪个git没有关系,mac系统自带git,应该是你的仓库在SourceTree上搭建得有问题。你先用terminal用输入git命令的方式进行commit和clone看有没有问题,如果有问题,terminal会给出error的,先试试看
  • PhoenixZhai:弄个分支出来,把master合并到分支后commint分支吗?为什么要弄个分支出来
    Hermione__Hu:@PhoenixZhai 先看你是要提交代码还是下拉代码。如果是提交代码,先要用master这个分支来检查服务器上面是否有新代码需要同步下来(为了在本地解决冲突,保证服务器永远是没有冲突的,方便团队合作),同步后,这样就可以将本地的dev分支合并到master,然后将master进行推送操作,就提交上去了。
  • PhoenixZhai:合并不会用
  • 花色衬衫:source tree 检出分支 没打开文件就出现了 未暂存文件 这是为什么?
    花色衬衫:@花色衬衫 也就是未暂存文件
    花色衬衫:@Hermione__Hu 好的, 是这样的。我克隆一个新仓库,检出hotfix分支。我还没对项目进行操作,出现了七个工作副本,
    Hermione__Hu:@花色衬衫 你的描述我没太懂,你的意思是说你切换到master分支之前,没有提交暂存文件吗?如果是这样,source tree是不会让你切换的,一定要提交working copy的文件,才能成功切换。如果我说的不对,请具体描述下你的问题我好做判断 :wink:
  • 747d410b915e:码了,感谢分享
  • LoveY34:有点复杂啊!
    Hermione__Hu:@Lylhf 可以先上手试试,遇到什么问题可以提出来 :blush:
  • BlueEagleBoy:请问如何忽略二进制文件的改动
    Hermione__Hu:@BlueEagleBoy 请参见我在2016.3.2补充二中写的,给SourceTree进行设置 :blush: :blush:
  • 柚子_童鞋:不错,码了
    Hermione__Hu:@简昕 感谢哦

本文标题:轻松使用SourceTree进行代码版本管理

本文链接:https://www.haomeiwen.com/subject/xoqvkttx.html