Git应用基础

Git是为托管Linux系统而开发的免费分布式版本控制系统,本文介绍其基本使用方法,使用平台为Linux

1. 版本控制系统


  • 集中式版本控制系统:所有代码保存在一台中央服务器,不同开发者通过客户端提交自己的修改
    image

  • 分布式版本控制系统:每个人的电脑上均有一个完整的代码库,一般由中央主机控制交换代码修改
    image

2. Git的配置


在使用Git前需要进行全局配置,例如设置用户名及email,这些将作为提交代码时的签名,基本语法如下:

git config [--global] <配置名称> <配置值>

例如,设置用户名和email的命令:

$ git config --global user.name "username"
$ git config --global user.email "exam@gmail.com"
  • 注意若在某次使用时不想使用全局设置,则可以去掉--global参数
  • 全局配置文件位于.gitconfig,为隐藏文件,可通过ls -al 查看
  • 针对某个项目的配置位于.git/config

3. 创建Git仓库


一般有两种方法来得到一个代码仓库,即从GitHub克隆或新建一个代码仓库

① 从代码仓库克隆

克隆就是把GitHub上的代码仓库拷贝到本地,首先要获取目标仓库的地址,即URL,使用如下代码进行克隆:

$ git clone https://github.com/example

克隆完成后将在当前目录下出现该代码仓库对应的文件,进入该文件即可操作

② 新建空代码仓库

若要新建一个代码仓库,则需要现在本地新建一个文件夹,在使用Git将其初始化为代码仓库,代码如下:

$ mkdir project
$ cd project
$ git init

代码仓库建立完成后会出现一个.git文件夹,存储相关项目配置文件

4. Git操作流程


对Git代码仓库进行修改一般需要如下操作流程:
- 创建或修改文件
- 使用git add 将修改添加到本地缓存区
- 使用git commit 提交到本地代码仓库
- 使用git push 提交到远端代码库
下面使用上述创建的代码仓库project为例进行操作:

进入project文件夹,创建新文件并增加内容,并用git status 查看代码仓库状态:

$ cd project
$ touch file1 file2 file3
$ echo "test" >> file1
$ echo "test" >> file2
$ echo "test" >> file3

将修改添加到本地缓冲区,再次查看状态,使用git diff --cached查看哪些文件发生变化:

git add file1 file2 file3
git diff --cached

注意:查看变化后按q键可以退出,不带参数--cached可以参看未添加到缓冲区的修改

提交代码到本地代码库

git commit -m "myMessage"

注意: -m 参数用于添加提交注释,-a可以提交未加入缓冲区的内容,但不能提交新建文件

4. 分支与合并


为了便于多人协作开发,Git支持多分支,即可以在主线(master)之外提交代码,不影响代码库的主线,确认开发完成后再将分支合并
下面给出创建分支,切换分支及合并分支的示例代码:

创建一个分支examplebranch :

$ git branch examplebranch

查看当前分支,结果中带星号的为当前分支:

$ git branch

切换到刚创建的分支:

$ git checkout examplebranch

注意:可以尝试在两个分支上修改文件,可以看到两个分支互不影响

切换回master分支,合并所作的修改:

$ git checkout master
$ git merge -m "Merge branch" examplebranch

注意:若两个分支修改的是不同的文件则合并成功,若修改了同一个文件,则会产生冲突

冲突的手动解决办法:使用文本编辑器打开冲突文件,删掉Git自动增加的冲突符号<<<<<< ,用git addgit commit 提交修改

删除不再使用的分支:

# 删除已合并分支
$ git branch -d examplebranch
# 强制删除分支
$ git branch -D branchname

撤销分支合并操作:

$ git reset --hard HEAD^

5. Git日志


通过查看Git的日志,可以方便地了解曾对代码库做过的修改,查看日志的基本命令为git log
实际Git的日志功能非常强大,具体可以通过git help log 来查看其详细功能

# 查看日志
$ git log 
# 日志统计,即详细的修改记录
$ git log --stat
# 格式化日志
$ git log --pretty=oneline
$ git log --pretty=short
# 显示提交历史线
$ git log --graph
# 自定义日志格式
$ git log --format: %h : %s
# 控制日志顺序,默认为逆时间顺序`--topo-order`,可以用参数`--reverse`换为顺序显示
$ git log --reverse
$ git log --topo-order

6. 内容比较


使用Git的diff可以方便地进行不同分支、不同版本之间的比较
通过命令git help diff可以查看其详细用法
在使用git diff时需要注意以下几点:

  • 不带参数时,比较的是未加入缓冲区的修改,但不能看到新建文件
  • 要查看缓冲区的修改,使用参数--cached
  • 查看结束后按下q退出比较环境
  • git diff branch1 branch2可比较不同分支之间的区别,只带一个分支时比较当前分支与指定分支的区别
  • 可以增加路径限定,只比较某个文件或目录的不同
  • git diff branch1 --stat 可以统计该分支具体有哪些改动

7. 分布式开发


如果不同的用户进行协作开发,他们如何向对方的代码库提交修改呢?

首先,每个工作者都需要克隆一份代码仓库,克隆完成后将建立一个一个名为myrepo的目录:

$ git clone [path] myrepo

当工作者将myrepo修改完毕后,需要将修改合并到主代码库,具体方法是在主代码库执行pull命令:

$ git pull [path]/myrepo master

注意:这里实际上隐含执行了两条命令,一是git fetch 从远程分支抓取修改内容,而是通过git merge 合并分支
在副本代码库中也可以执行git pull,这时由于配置文件记录了主代码库信息,故不需要指定路径,可以直接将主代码库的更新合并进来

上述命令也可以分开执行:

# 经常访问的远程代码库可以定义简写名
$ git remote add myrepo [path]
# 抓取内容
$ git fetch myrepo
# 抓取后可以用log查看远程代码库的修改
$ git log -p master ..myrepo/master
# 合并代码库
$ git merge myrepo/master

注意:若远程代码库不在本地主机上,可以通过ssh协议来访问,即git所需的地址可以是本地路径,也可以是ssh地址
在实际开发中,通常会有一个公共的代码仓库

每个开发者都可以从对方的代码库中通过一定协议抓取修改,但没有写的权限,如何上传代码到公共仓库?
可以使用git push命令来推送代码,目标地址可以使用ssh/http/https,推送失败git会报错

注意:如果在推送代码时发现公共代码库已经发生修改,则应先pull合并修改,再用push一并推送

8. Git标签


Git中可以使用一个标签来指定某一次提交,具体命令为git tag
不带任何参数时,创建的标签为轻量级标签

# 查看提交记录,获取commit名称(一串字母和数字)
$ git log
# 使用stable-1作为commit1的代称
$ git tag stable-1 [commit1Name]

注意:commit名称很长,一般写8位以上即可

如果想要为标签添加注释,或者附加一个签名,则需要创建标签对象

使用附加参数-a-s-u参数中任意一个,均可创建标签对象,使用-m添加注释
例如,下面的命令创建了带注释的标签:

git tag -a stable-2 8c315325 -m "stable 2"

标签的签名有以下两种方法添加:
- 先在配置文件.gitconfig或者.git/config中进行配置,在创建tag时使用-s参数引用

$ git config (--global) user.signingkey <gpg-key-id>
$ git tag -s stable-1 [commit1Name]
  • 未进行配置时直接使用-u参数进行添加
$ git tag -u <gpg-key-id> stable-1 [commit1Name]
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页