Source Tree工具与Git使用基础

作者: 匿称也不行 | 来源:发表于2018-01-14 10:47 被阅读100次

    算是personal tech debt吧,趁周末有时间,把这部分训练一下。这部分是纯粹基础的内容,但对于日常工作,目前来说是够了的,可能和我本身就是Junior的职位有关。

    使用基础包括以下两个部分:

    • Source Tree与Git连接
    • Git commit/pull/push/merge/fetch/branch

    整个流程配合一个简单的Sample Project。

    Source Tree与Git连接

    • 下载及安装Source Tree
      这一步请自行完成。至于为什么要用Source Tree,而不用git命令行工具,这个是个人选择,如果用命令行,可以略过本文,因为本文的重点是在如何用Source Tree使用Git。
      下一步之前,你需要有一个Git账户。
    • 连接Git和Source Tree。
      打开安装好的Source Tree,在右上角⚙️里添加自己的Git账号即可,https和ssh方式都可以,如果你对ssh方式不熟悉,可以先使用https,用账号密码的方式来处理。将来有需要了,可以进一步了解ssh方式。

    使用Source Tree进行第一次Commit

    • 拥有一个project
      有一个项目,或者repo,是进行提交的前提。本着简单的角度出发,可以在Github的自己的主页建立一个名字叫做demo的project/repo,然后打开这个repo,点击绿色按钮clone or download,就可以得到https的repo地址,复制这个地址。
    • 连接reop到Source Tree
      在Source Tree小窗选择new-clone from url,填入url后,选择https方式,即可连接完毕。这几步比较简单,如果出现问题,请自行搜索一下解决方案。
    • 初次commit
      当你刚才添加repo到Source Tree之后,其实你做了几件事。
      • 添加repo给Source Tree管理
      • 在本地建立了一个repo
      • 本地的repo与远程repo之间建立了关联

    意义:本地和远程的仓库,就像是公司电脑和家里办公的电脑。两台电脑一般来说,希望保持文件一致性(假设你一直工作在一个项目,而不是家里与公司工作内容不同)。但是,这种同步性,并不是自动的,这里就会出现各种各样的问题,以及后续操作的复杂性。这一点先要交代一下,不然后面的工作比较难的理解。

    我们假设本地的仓库叫做demo_local,远程的叫做demo_remote,两个仓库都针对一个项目project。这里可能会出现若干种状态,只提出来,不要管解决,先给自己一个现实印象。假设当前两个仓库是保持一致的,文件内容完全统一。然后我们有可能做出改动,从而导致两个仓库内容不同:

    • 我们修改了demo_local;
    • 我们修改了demo_remote;修改demo_remote可以通过很多种方式达到,比如Github网页或者其他人在你的项目提交了内容;
      之后的内容,就会在这种不同的基础上,提一下我们的解决办法。但在此之前,逻辑上我们得提出目的:有不同,我们需要做什么?比如:
    • 我们修改了demo_local,我们希望远程也更新这部分修改;
    • 修改了demo_remote,我们希望本地也能与远程保持一致;
      对,这就是我们的目的,到这里,可能比较能理解,操作其实比较容易的。
      先说最基本的,我们要改一下本地的内容。

    你可以随意在demo文件夹增加一个文件,比如说test.java,然后会发现source tree中出现了这种改变,此时我们可以commit,并选中push change immediately to ...这样,第一个commit就完成了,同时,远程也同步了这次commit。

    commit & push

    刚才进行的两个操作就是:先本地提交,再上传更新到远程。
    如果你不选择push...选项,那就是只有本地提交,可以之后再push,分开进行。如果是这样,Source Tree会用标记1提示你,你有一个本地commit没有提交到远程。

    简单的部分结束了,接下来的部分,得自己通过项目感受一下

    接下来的内容,是理解一下Source Tree的每个按钮。我没有按照项目顺序来说这部分。如果希望step by step tutorial,可以搜寻其他的文档,有很多。这里只说每个按钮的意义和作用分别是什么。至于他们怎么和demo关联,请自己尝试项目后,再来看下面的内容是什么意思。

    下面的按钮,并未按照Source Tree界面的顺序来。可能每个人心里都有一个“不懂”-“懂”的顺序,从而有希望优先理解的顺序。

    • Fetch按钮
      从远程获取内容,比如其他人,或者你自己用其他工具/电脑提交了更新,本地的repo不知道,需要fetch才行;
      Fetch并不专门针对某一个分支,而是会将所有的分支更新都拉回来。
    • Pull按钮
      将从远程拉取的更新,并入到本地;比如其他更新在远程已经有了,但本地没有同步,先Fetch后,pull就会真正并入,Fetch相当于change,pull相当于apply change;
    • Push按钮
      在本地的更新,commit,如果不与remote同步,会保持在本地,同时push按钮会出现本地更新commit的次数,如果需要与远程同步,就用push。
    • Branch按钮
      新建分支,或者删除现有分支
    • Merge按钮
      当希望将远程的其他分支并入当前分支,比如master更新了,希望将本地branch1中并入master的改动,那么就需要merge。
      merge需要选择对象。比如master做了两个commit改动,G1和G2,只希望并入G1,那么就选择G1的master节点,并入当前branch1,同时处理冲突。
      Merge的意思,是将别的分支的内容,合并到当前分支,这里需要注意,合并的意思是:我知道master修改了,我已经将改动的部分拉回来看了,有冲突,我选择了希望保留的部分,也保留了自己想要的却和master不一样的部分。处理完冲突后,merge完成,完成的内容并不是以master为准的。graph会出现分支合并的形状,注意这里表示的是动作,而不是内容。我做出了合并的动作,但合并的内容还是branch1自己决定的。
    • 冲突处理
      冲突出现后,比如希望merge master的内容,点了merge后,出现了冲突,处理的顺序是,首先在文件中处理,哪些更新需要保留,那些需要修改;
      修改完成后,重新commit因此,就会完成合并动作。
    • Pull request
      这个和Merge就不是一个意思了,Pull request是指将当前branch1的内容,提交至master,也就是分支的工作,合并入master主体工作,代表着分支工作的完成,因此,预期是分支在此之后就不会再存在了,所以,流程是不同的。
      Pull request发出后,首先也是要处理冲突,选择好要处理的部分,确认提交后,就可以完成merge了。
      这里的merge一旦完成,两个分支master和branch1就会保持一致了,这个和merge完全不同,这里的意思是:我做出了要求合并入master的动作,合并的内容能否通过由master冲突处理决定,一旦处理完成,branch1的内容也会和处理的结果保持一致。
      理论上来说,完成了pull request之后,分支就可以不要了,但如果想保留,其实不删除的话,还是可以继续更新的,就如同是刚刚从master建的分支一样。

    其实,看过不少git的教程,但其实最真实的感受就是:你得感觉得到需求在哪里,才能理解那些设置的原因是什么。同时你得理解逻辑过程,才能理解每个操作可能出现的问题和后果。

    此篇稍微记录一下对于Git技术债还款的第一部分。给自己点个赞😄

    相关文章

      网友评论

        本文标题:Source Tree工具与Git使用基础

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