1 介绍

本教程简单介绍了GitGUIGitBashTortoiseGit使用HTTP方式克隆/推送版本库以及SSH添加密钥的方法。
本教程使用的图片部分来自菜鸟教程、廖雪峰的官方网站以及阮一峰日志。

2 基本概念

  1. 工作区
    电脑里能看到的目录。
  2. 暂存区
    存放于隐藏文件夹.git中的index文件,也叫作索引区。
  3. 版本库
    隐藏文件夹.git.git不属于工作区,而是Git的版本库。

3 分布式工作流程

3.1 集成管理者工作流

有一个主仓库和若干个公开仓库,每个开发者需要先从主仓库克隆出自己的公开仓库,然后将自己的修改推送上去,然后可以请求主仓库的管理者拉取更新并合并到主仓库,流程如下:

  1. 开发者派生主仓库,此时开发者有自己的远程仓库。
  2. 克隆自己的仓库到本地,做出修改并推送。
  3. 请求拉取自己的更新。
  4. 管理者在自己的本地仓库中,将开发者仓库加为远程仓库并合并修改。
  5. 管理者将合并后的修改推送到主仓库。

3.2 分支开发工作流

只有一个中心仓库,但是有很多分支。只在主分支上保留完全稳定的代码,还可以有一些类似develop或者next的平行分支,可以用来做后续开发或者测试功能稳定性,等这些分支一旦达到稳定状态,就可以合并到主分支了。

3.2.1 创建与合并分支的概念

Git中,你的每一次提交都被Git串成一条时间线,一般来说,这条时间线就是主分支masterGitHEAD指向你当前工作在哪个分支,再用master指向你的当前提交版本,这样就可以确定你的当前分支以及当前分支的提交版本,每次提交master就会向前移动,指向当前提交版本。

当创建一个新分支dev时,其实是新建了一个dev指针,指向master相同的提交,要切换到dev分支就只需要将HEAD指针指向dev就行。

从现在起,你对工作区的修改和提交都是针对dev分支,每次提交,都是由dev指针向前移动,指向当前的提交版本。

如果要合并,只需要将master指向dev的当前提交版本就可以了,合并完可以删除dev指针,这样就只剩一条主分支。

Git无法自动合并分支时,会提示冲突,此时必须首先解决冲突,将合并失败的文件内容编辑为希望的内容,然后再提交,最后合并完成。

4 使用方法

4.1 Git Bash

Git Bash是通过命令行终端进行项目开发,GitGUITortoiseGit的本质就是用图形化界面对这些命令进行了封装,有些时候还是得通过命令行的方式进行操作。

4.1.1 命令清单

一般来说,日常使用只需要以下6个命令:

  1. 新建版本库
# 在当前目录下新建一个Git版本库
git init

# 将指定目录其初始化为Git版本库
git init [project_directory]

# 克隆一个Git版本库
git clone [url]
  1. Git配置
# 查看当前Git配置信息
git config -l

# 配置Git用户信息
git config --global user.email "E-mail_Address"
git config --global user.name  "User_Name"

# 忽略特殊文件,需要编写.gitnore文件,并放入版本库
# 忽略原则
# 1.忽略操作系统自动生成的文件,比如缩略图
# 2.忽略编译产生的中间文件、可执行文件等
# 3.忽略存放有敏感信息的个人配置文件

# 检查gitnore配置文件的问题
git check-ignore

点我浏览gitnore配置文件

  1. 增删文件
# 将指定文件添加到暂存区
git add [file1] [file2] ...

# 将指定目录添加到暂存区,包括子目录
git add [directory]

# 将当前目录下所有文件添加到暂存区
git add .

# 删除工作区文件,并将此次删除放入暂存区
git rm [file1] [file2] ...
  1. 提交代码
# 提交暂存区到版本库
git commit -m [commit_message]

# 提交暂存区的指定文件到暂存区
git commit [file1] [file2] ... -m [commit_message]
  1. 分支
# 查看所有本地分支
git branch

# 查看所有远程分支
git branch -r

# 新建一个分支,但仍处于当前分支
git branch [branch_name]

# 新建分支并切换到新分支
git checkout -b [branch_name]

# 切换到指定分支
git checkout [branch_name]

# 删除指定分支(使用-D来强制删除一个未被合并的分支)
git branch -d [branch_name]
  1. 标签
# 查看所有标签
git tag

# 为当前提交的版本创建标签
git tag [tag_name]

# 为指定版本创建标签
git tag [tag_name] [commit_id]

# 为指定版本创建带有说明的标签
git tag -a [tag_name] -m "tag_description" [commit_id]

# 推送本地标签到远程
git push [remote_name] [tag_name]

# 推送所有未推送的本地标签
git push [remote_name] --tags

# 删除一个指定的远程标签
git push [remote_name] :refs/tags/[tag_name]

# 删除本地标签
git tag -d [tag_name]
  1. 查看信息
# 查看所有变更文件
git status

# 查看当前分支的版本历史
git log

# 查看命令历史
git reflog

# 查看暂存区和工作区差异
git diff

# 查看任意两个版本之间的改动
git diff [commit_id1] [commit_id2]

# 查看任意两个版本的src文件夹的差异
git diff [commit_id1] [commit_id2] src

# 查看远程仓库信息,显示可以拉取和推送的地址,如果没有推送权限就看不到推送地址
git remote -v
  1. 远程同步
# 关联一个远程仓库
git remote add [remote_name] [url]

# 下载远程仓库所有变动(到版本库),可以先查看远程仓库的变动再选择是否合并到本地
git fetch [remote_name]
git log -p FETCH_HEAD
git merge [remote_name]/master

# 拉取指定远程分支的变化并与指定的本地分支合并(不推荐)
git pull [remote_name] [remote_branch]:[local_branch]

# 推送本地指定分支到远程仓库
git push [remote_name] [branch_name]

# 强行推送当前分支到远程仓库,即使有冲突
git push [remote_name] -f
  1. 撤销
# 丢弃工作区文件的修改(文件还未添加到暂存区)
git checkout -- [file]

# 丢弃工作区文件的修改(文件已添加到暂存区),先撤销暂存区的修改再丢弃
git reset HEAD [file]
git checkout -- [file]

# 重置暂存区的指定文件,与上一次提交保持一致,但工作区不变
git reset [file]

# 重置暂存区和工作区,与上一次提交保持一致
git reset --hard

# 回退到指定版本
git reset --hard [commit_id]
  1. 发布版本
# 将master分支最新节点打包
git archive --format zip --output [release_name].zip master

4.2 Git GUI

安装Windows版本的Git时,会默认安装一个简单的GUI工具,提供图形化界面。

4.2.1 Git GUI汉化

GitGui汉化项目
将汉化文件拷贝到Git安装目录下的\mingw64\share\git-gui\lib\msgslib下没有msgs文件夹则需要新建一个。
汉化后的GUI界面如下所示:

4.2.2 Git GUI配置

点击编辑,选项,更改文件内容编码为UTF-8

4.2.3 Git GUI使用

4.2.3.1 克隆已有的远程仓库
  1. 单击右键Git GUI Here,克隆一个已有的远程仓库
  2. 缓存改动到暂存区,然后提交到版本库


  3. 上传到远程仓库(默认是origin)
  4. 从远程仓库获取变动
  5. 本地合并变动

4.2.3.2 本地上传新的版本库
  1. 创建新的版本库
  2. 上传本地版本库(可填写地址直接上传,无需去远程创建)
    HTTP:http://192.168.3.179/[User_Name]/[Project_Name].git
    SSH:git@192.168.3.179:[User_Name]/[Project_Name].git

4.3 TortoiseGit

4.3.1 HTTP方式克隆/推送版本库

4.3.1.1 GitLab及TortoiseGit配置说明
  1. GitLab设置中文
    点击settings

    选择preference

    找到Localization并修改Language为简体中文:
  2. TortoiseGit设置
    项目文件夹里单击右键选择TortoiseGit(T) --> 设置

    点击编辑全局.git/config,配置自己的信息,加入:
[credential]
	helper = store

这是为了记住用户名和密码:

4.3.1.2 创建本地版本库
  1. 新建项目文件夹
  2. 在项目文件夹里单击右键选择Git在这里创建版本库
4.3.1.3 创建远程仓库

4.3.1.4 绑定远程仓库并提交
  1. 克隆仓库地址(使用HTTP克隆)
  2. 单击右键选择Git提交
    (1) 填写日志信息,描述项目文件改动。
    (2) 勾选未受版本控制的文件,即未提交的文件。

  3. 点击推送(URL为克隆的仓库地址)

4.3.1.5 新建分支与合并

新建一个分支相当于新建了一份备份,比如要添加新功能时,可以在新建的分支里进行测试,测试成功后再合并到主分支,新分支的修改不影响主分支。

  1. 创建分支并切换到新分支
  2. 创建newFunction.txt文件用于测试修改
  3. 提交修改并推送到新分支v1.0.0

    查看远端仓库可以发现,主分支没有变化,但是有新的分支可以合并:

{% note warning flat %}
注意:
合并新分支到主分支,一般是由项目管理者去合并分支,项目开发者克隆原始版本到本地后,可以新建分支进行开发测试,测试无误后可将此分支提交到远程仓库,由管理者审核后可合并到项目主分支。
{% endnote %}

4.3.2 SSH添加密钥

只有添加了密钥才能使用SSH URL克隆仓库。

4.3.2.1 检查本机已存在的SSH密钥

右键单击git bash here,输入cd ~/.ssh
提示No such file or directory说明是第一次使用。

4.3.2.2 创建SSH密钥

ssh-keygen -t rsa -C "e-mail address"
持续三次回车,id_rsa是私钥,id_rsa.pub是公钥。

4.3.2.3 添加SSH密钥

复制id_rsa.pub内容粘贴到密钥文本框:

文章作者:GentleTK
原文链接:https://gentletk.gitee.io/Git使用教程

更多推荐

Git使用教程