我爱编程

git学习手册

2018-05-27  本文已影响0人  云卷云舒_MyHoliday

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

什么是版本控制系统?

1.jpg
版本 文件名 用户 说明 日期
1 service.doc 张三 删除了软件服务条款5 7/12 10:38
2 service.doc 张三 增加了License人数限制 7/12 18:09
3 service.doc 李四 财务部门调整了合同金额 7/13 9:51
4 service.doc 张三 延长了免费升级周期 7/14 15:17

常见版本控制系统

2.jpg

缺点:必须联网才能工作

3.jpg

git的诞生

Linus在1991年创建了开源的Linux,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的

那Linux的代码是如何管理的呢?

安装git

Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。

在Linux上安装Git

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

在Mac OS X上安装Git

4.jpg

Xcode是Apple官方IDE,功能非常强大,是开发Mac和iOS App的必选装备,而且是免费的!

在Windows上安装Git

自我介绍给git

每次 Git 提交时都会引用这两条信息,说明是谁提交了更新

git config --global user.name "Yakov Fain"
git config --global user.email "yakovfain@gmail.com"
** 如果您希望能够为不同的项目使用不同的用户名和电子邮件,请在没有--global选项的情况下从项目目录运行上述命令。

创建版本库repository

版本库:可以简单理解成一个目录,这个目录里的所有文件都可以被git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

忽略文件

编译的中间文件比如class这些文件我们不需要上传到git,就可以通过忽略文件来实现

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

状态命令

5.png

红色的文件是未跟踪的文件

注意:

版本控制系统只能跟踪文本文件的改动

二进制文件没法跟踪文件的变化(只知道改变了大小,不知道具体改了什么)

把文件添加到版本库

6.png

把大象放到冰箱需要3步,把一个文件放到Git仓库只需要两步。

7.png

添加命令(文件内容到索引)添加到购物车

添加完之后,可以再次执行git status命令查看状态

8.png

提交命令(购物车统一结账)

9.png

提交记录查看

10.png 11.png

注:commit后面的一串字符是commit id版本号,SHA1计算

小结

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

查看提交记录:git log以及git log -n

版本管理

版本回退

12.png 13.png 14.png 15.png 16.png

小结

分支管理

每一个开发人员都有一个分支,通常还有div分支以及master分支

创建与删除分支

合并分支

把mary开发的代码合并到master主分支上

17.png

没有冲突是Fast-forward快进模式

解决冲突

首先张三从zhangsan分支提交了对Pter.java的修改,修改内容如下

class Peter{
    int a = 10;
}

并把修改合并到主分支

mary开发中也对Peter.java进行了修改,修改如下

class Peter{
    String name = "mary";
}

想要把mary分支合并到主分支master,就会出问题

18.png

这里就会说明有冲突

代码中也会出现提示

19.png

HEAD代表当前分支版本,mary代表mary分支

解决方案就是修改冲突并再次提交

远程仓库github

GitHub是一个基于Web的Git仓库托管服务,在这里您可以免费创建一个共享的代码仓库。希望在GitHub上创建私有存储库的人或组织可以购买付费帐户。

http/ssh

20.png 21.png

创建远程仓库

22.png 23.png

添加远程仓库

目前firstgit仓库还是空的,我们可以从这个仓库克隆出新的仓库,也可以把本地仓库与之关联,然后把本地仓库的内容推送到GitHub仓库。

推送到远程仓库

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

SSH警告

第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

原因:需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

小结

关联远程库:git remote add origin git@server-name:path/repo-name.git

第一次推送master分支:git push -u origin master

后面推送最新修改:git push origin master

从远程库克隆

24.png 25.png

多人协作开发,每个人从远程克隆一份即可。

小结

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

多人协作

$ git remote
origin

抓取分支

多人协作时,大家都会往masterdev分支上推送各自的修改。

26.png 27.png 28.png

再pull:

29.png

git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

总结

多人协作的工作模式通常是这样:

  1. 首先用git pull拉取最新代码试图合并;
  2. 如果合并有冲突,则解决冲突,并在本地提交;
  3. 解决掉冲突后,再用git push origin branch-name推送

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/branch-name branch-name

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

小结

上一篇下一篇

猜你喜欢

热点阅读