如何更优雅的使用git

        在mac中,找一个好用的git软件很难!不是收费巨贵,就是限制试用期。好在,进入新公司,公司同事给推荐了一个软件--sourceTree,正好趁着这个机会把git相关的知识汇总下,也算是给自己记个笔记吧!

        看吧,就是下面这个图标,一般公司,项目只要涉及多人开发,都会用到版本控制工具。git相比svn,主要优势体现在:

        1.Git可以创建许多branches,每个branch都是独立的,当我们需要修改代码的时候,commit也只是对本地仓库的修改。在SourceTree中,我们会发现在工具栏的Git Flow功能,已经很好的为此做了准备。

        2.所有log都存储在本地!svn的log都是存储在服务器上的,当我们要查阅修改记录的时候,必须要能够连接上远程服务器,并且具有权限。而Git不同,Git对于本地仓库的修改记录都是在本地,方便查阅。

        3.合并代码更加方便!因为Git支持本地无限Branches,当我们个体在本地创建多个branches用于不同目的的时候(修改,新增,探索),合并一份代码显然要比svn合并一堆工程copy更加简单。

        4.更加安全!Git的commit命令不同于SVN,commit只是对本地仓库代码的一次更新。当需要提交到master远程仓库,或者其他远程分支仓库的时候,需要使用push功能。虽然增加了一个过程,却可以防止随意修改导致后期合并出现大问题的风险。

        5.目录更加简洁!在Git本地仓库根目录,只有一个.git文件,它包含了所有的管理信息。而SVN想必大家都知道,每个子目录下都有噁心的.svn。这个当需要修改文件冲突等问题时,就需要考虑了。肯定是一个文件简单。

        第一次打开软件,安装需要注册账号,还要有所谓的人机对话,我一开始没搞明白人机对话是什么意思!后台度娘了一下,说是软件如果没注册,会有20天的试用期限制,注册并且进行人机对话之后,就可以无限期使用软件了。其实,所谓的人机对话,说白了就是类似12306的验证码程序,让你选图片的。成功安装后、打开界面是这样的:

      075300_AFZC_3360973.png 

         第一次是没有目录的,这是我拉取公司的项目才有的。点击新仓库、可以从git上分支url上进行克隆,也可以先登陆账号,然后创建远程仓库。项目下载完毕,就会直接进入主界面:

075751_7dKS_3360973.png

         基本的实用项目都在,远程仓库上有更新,拉取项上会有数字提示,还是挺人性化的,点击终端,就会直接打开位于该目录下的mac终端,可以输入命令行进行修改,git的命令一般不会太复杂,我特别整理出来,方便使用

        如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入:  $ git init

        该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。

        克隆现有的仓库(可重新命名): $ git clone url defineName

        检测当前仓库状态:$ git status

        跟踪新文件并将文件加入到仓库:$ git add

        (将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适) ,当再次编辑文件,没有运行git add就直接运行git commit,提交的文件版本为最后一次git add进行暂存的版本。

        添加忽略文件,不进行追踪:

        $ cat .gitignore

        $ *.[oa]   // 忽略所有以 .o 或 .a 结尾的文件。这些文件一般都是在编译中生成的。

        $~          // 忽略所有以波浪符(~)结尾的文件。

        你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等,避免提交无用文件。

        跳过使用暂存区域(跳过git add,直接提交所有改动页面):$ git commit -a 

        查看提交历史:$ git log

        查看你已经配置的远程仓库服务器,可以运行 $ git remote 

        如果你已经克隆了自己的仓库,至少能看到 origin - 这是 Git 的默认名字

        添加远程仓库:$ git remote add name https://github.com/paulboone/ticgit

        从远程仓库中抓取与拉取:$ git fetch [remote-name]

        向远程仓库推送:$ git push [remote-name]

代码提交冲突解决方案:

     如果两个开发者修改了同一个文件的同一段代码,或者修改了同一个文件路径,提交并push到sourceTree时会提示冲突。需要先修正本地冲突,冲突的标志是“<<<<<<<”,"=======",">>>>>>>"之间的部分,解决的办法:

    (1)第一种是逐行删掉冲突,找到protect.pbxproj,右键选择“在finder中查看”,找到protect.pbxproj文件双击打开,cmd+f搜索“<<<<<<<”,找到冲突的部分,删除“<<<<<<<”及其对应的行,删除“=======”及其对应的行,删除“>>>>>>>”及其对应的行,然后重新提交就可以了。

    (2)第二种方法,右键---->解决冲突——>使用他人版本解决冲突---->确定-----重新提交

    (3)第三种方法,revert冲突的本地文件,然后重新提交

     如果文件已经提交到本地仓库,但未push到服务器,出现冲突,可以回滚本次提交。

     拉取文件时如果出现文件冲突,解决办法:revert冲突的本地文件,然后重新提交。

    (下边是我自己的总结,关于冲突的解决方案)

1240

        config文件冲突了,这里需要说明的是,冲突大概有两种情况:

        (1)没有代码的文件冲突:一般像config或者工程文件冲突,我们的处理就是放弃自己的本地修改,即revert(重置)自己的config或者工程文件,再次拉取就没有什么问题了。

        (2)有代码的文件冲突:这种情况就要注意了,十分建议在进行下一步操作之前,备份一份自己的代码,最少是自己动过的类,不然很有可能自己的辛苦劳动在“重置”之后不见了。这种情况我的处理方法是:备份后选择将冲突的类全部重置,然后拉取,此时就不会冲突了,再把自己写的代码拷贝到拉取后的相应的类文件里面,再提交推送就可以了。

        (3)小技巧避免冲突

        一般我们提交代码的顺序是:拉取-提交-推送。这个没有问题,但是有时候会只是提交了,忘了推送,过了一个小时或者一段时间,才想起来,结果推送的时候冲突了,甚至你即便刚刚提交了,马上点击推送,都可能造成冲突:因为有人可能在你操作:拉取之后,提交之前,又推送了,你的版本不是最新的版本了,可能造成冲突。所以建议大家提交代码的顺序是:拉取-提交-拉取-推送。而且,最好是提交了代码,马上拉取,马上推送,尽量避免不冲突。因为冲突给我们带来不必要的麻烦:本来开开心心的撸代码,最后因为这个难用的sourcetree把心情搞的很糟糕。不值。

        甚至有这种方法避免操作,屡试不爽:想提交自己的代码了,先不拉取,先提交,提交好了,再拉取,再推送,即:提交-拉取-推送。这种方法基本上不会冲突,因为保证了你的代码是最新的版本,这种操作下甚至于两个人同时动一个类文件都不会冲突。总之,建议大家使用这种方法。亲测无误。

(4)丢代码的情况。

        丢代码的情况我们也遇到过,具体产生的原因我至今没有搞明白,应该是有人的版本落后了,但是没有拉取,等他提交和推送的时候,选取的可能太多,把别人的代码干掉了,这只是我的推测,不知道具体操作是什么。这种行为太令人愤怒了,辛苦撸的代码被别人搞丢了,一些bug又都出现了,真心不能开心的撸代码了。

        这种情况就是有人操作不当造成的,所以希望提交代码只动自己的类,不要动别人的!如果,在开发过程中,两个人需要动同一个类的话,两个人商量好,谁先谁后,不要出错就好了。

(5)安卓和iOS和混合开发发生冲突

        至今我没遇到,但是安卓的遇到了,他和我们iOS的代码冲突了。。。具体真的遇到了会再来这里补上解决方案。总之,sourcetree很难用,每一次拉取提交推送,都要小心谨慎啊。

5、小建议

    (1)重新checkout的sourcetree要记得“检出”一下,才有develop。不然在自己的文件夹下边可能只有一个什么README.md的文件,没有工程文件,没有.h,没有.m,什么也没有。

1240

     checkout下来找不到自己的工程在哪里,可以点击“在finder中显示”,就会自动找到的。

         在checkout的时候会指定一个路径,尽量不要动这个路径,不然会提示一个“这是无效的url”。这一点不知道如何解释。。。

    (2)提交的时候要提交develop,不要动master。master是主枝,是最后打tag包时候用的或者对master做操作的时候才用到的。

6、今天又遇到一个bug,如图:

1240

告诉我你是谁?!

      可能是app上线了以后,没有怎么打开过sourcetree的原因吧,然后居然忘记我了。。。。

解决办法:

1240

在这里打开终端,输入下边的命令行:

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

敲回车,再去sourcetree提交或者进行别的操作即可。

        

        

    

        

        

 

        

        

 

        

转载于:https://my.oschina.net/u/3360973/blog/860591

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值