轻松使用SourceTree进行代码版本管理
以前刚刚接触SourceTree的时候,觉得很简单,遇到冲突了去包文件里面删掉那些明显的标记,然后在谁也不知道谁删掉了谁的文件的情况下,只要不报冲突就算是自己给自己的版本推上去了,这样明显不是SourceTree的初衷
(其实我以前就是这么干的...现在觉得自己还是too young too naive...)
幸好,在我的老大Thomas的指引下,和我的好同事Poul的共同探讨+实践下,应该算是弄明白了SoucreTree的使用
大家都知道git是分布式的代码管理工具,理论上面大家都明白,可是实践高于理论,那么请尝试着采用以下的方法来理解它的原理吧!
准备工作
第一步:创建自己的本地分支
(服务器配置工作暂时不说了,这不是本文的重点)
你需要打开SourceTree,注意右侧BRANCHES,REMOTES,(如果你是第一次使用SourceTree的话,这个BRANCHES的类目下面基本上只有一个master,这个master是本地的master,REMOTES这个类目下也有一个master,这是服务器远端的master)
关键点:我们在BRANCHES这个类目下新建一个branch
方法如下图:
为了代码管理的方便,我们尽量遵循
- 只能让本地的master向远端的master进行提交工作
- 忽略工程中二进制文件的改动(建议将二进制文件与代码文件区分路径存放,这样在暂存的文件中我们比较容易识别出哪些文件可以不进行commit,以避免不必要的冲突)
- 还有不得不说的是,尽量在提交和合并的时候完全Quit出XCODE
工作流程
上班第一件事:merge
上班第一件事就是从服务器拉取其他同事的代码到本地进行merge
我们所要做的就是按照如下进行:
- 右击自己新建的DEV,选择checkout到master上,(如果已经是master就不需要切换了----如何分辨出当前在哪个分支下?答:当前的分支是粗黑体)中文版本为检出到master
- 然后点击fetch,从远端获取最新动态
- 然后点击merge,选中到最新的节点,OK即可
- 最后再checkout到自己新建的DEV,右击master选择merge master into DEV
这样就完成了合并代码
下班最后一件事:commit
务必记住在开始代码编写工作前请先checkout到DEV,直到工作完成,我们来commit代码
- commit自己写的的文件,这样自己的文件就被提交到了自己的DEV分支中
- checkout到master,然后右击DEV,选择merge DEV into master
- 将working space中不需要commit的文件或者需要解决冲突的文件discard掉
- push到远端即commit成功
- 注意提交成功后切换到DEV
最后附上一些参考资料,感兴趣的可以看看
感谢你们!
2016.2.24补充:
当我编写代码完成,发现远端有新动态,此时的操作:
- 先将Working Copy中需要commit的文件commit到DEV上(在comment区域做上自己的版本注释)
- 切换到master上,选择merge DEV into master(此时SourceTree会告诉你,你当前落后了多少超前了多少,如果没有这样的提示,就fetch一下远端)
- 进行merge(将本地的master与远端的master进行合并)
- 没有问题,push到远端
- 切换到DEV,选择merge master into DEV
2016.3.2补充一:
除了使用merge的方式和代码,还有一种是rebase,探索中......
2016.3.2补充二:(IMPORTANT----可有效避免冲突的发生频率)
在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