什么是 Git
概述

- Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
安装 Git
下载
下载地址:https://git-scm.com/downloads

安装
双击安装文件,然后出现安装向导界面,点击下一步(Next)即可

接着出现授权信息界面, Next即可

选择安装路径

选择文件关联,如果你不清楚,直接默认,下一步即可

接着出现开始菜单文件夹,默认,下一步即可

然后是是否配置Path的配置,选择中间一个,可以通过 Windows命令行(CMD)调用 git 命令。 然后点击下一步

选择回车换行的格式。默认即可.(检出时转换为Windows风格,提交时转换为Linux风格.)

然后是安装进度界面

安装完成. 去掉那个查看版本说明的复选框,点击完成(Finish)按钮即可

可以在cmd里面测试是否设置了Path,是否安装成功. 在CMD中输入 git 或者 git --version 试试

Git 的一般工作流程
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

Git 的基本操作
获取与创建项目命令
git init
用 git init 在目录中创建新的 Git 仓库。 你可以在任何时候、任何目录中这么做,完全是本地化的。
git init
git clone
使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
git clone [url]
基本快照
git add
git add 命令可将该文件添加到缓存
git add <filename>
git status
git status 以查看在你上次提交之后是否有修改。
git status
git status -s
git diff
执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
- 尚未缓存的改动:git diff
- 查看已缓存的改动: git diff --cached
- 查看已缓存的与未缓存的所有改动:git diff HEAD
- 显示摘要而非整个 diff:git diff --stat
git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。
git config --global user.name 'yourname'
git config --global user.email youremail
将文件写入缓存区并提供提交注释
git commit -m 'update message'
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
git reset HEAD -- <filename>
拉取与推送
git pull
git pull命令用于从另一个存储库或本地分支获取并集成(整合)。git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
git pull <远程主机名> <远程分支名>:<本地分支名>
将远程存储库中的更改合并到当前分支中。在默认模式下,git pull
是git fetch
后跟git merge FETCH_HEAD
的缩写。更准确地说,git pull
使用给定的参数运行git fetch
,并调用git merge
将检索到的分支头合并到当前分支中。
git push
git push
命令用于将本地分支的更新,推送到远程主机。它的格式与git pull
命令相似。
git push <远程主机名> <本地分支名>:<远程分支名>
标签
git tag
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag
给它打上标签。
比如说,我们想为我们的 商城 项目发布一个"1.0.0"版本。 我们可以用 git tag -a v1.0.0
命令给最新一次提交打上(HEAD) "v1.0.0" 的标签。
-a
选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解。 我推荐一直创建带注解的标签。
git tag -a v1.0.0
如果我们要查看所有标签可以使用以下命令:
git tag
TortoiseGit 简化 Git 操作
TortoiseGit, 中文名海龟 Git. 海龟 Git 只支持 Windows 系统, 有一个前辈海龟 SVN, TortoiseSVN 和 TortoiseGit 都是非常优秀的开源的版本库客户端. 分为 32 位版与 64 位版.并且支持各种语言,包括简体中文
下载
下载地址:https://tortoisegit.org/download/

安装
我们需要先安装程序包,然后安装语言包(LanguagePack). 因为TortoiseGit 只是一个程序壳,必须依赖一个 Git Core,也就是上一节我们安装的 Git. 所以安装前请确定已完成上一节的操作. 下面以64位版本为演示(64,32位除文件名不一样,其他的操作都一致)
- 双击安装程序

- 下一步,进入版权信息界面. 直接点击下一步(Next)即可

- 下一步,选择SSH客户端. 可以选择 TortoiseGitPlink(位于TortoiseGit安装目录/bin 下), 也可以选择 Git 默认的SSH客户端,位于 Git安装目录/bin/ssh.exe(如果配置了 Path,那直接是 ssh.exe)

- 接着是选择安装目录,可以保持默认,或者安装到开发环境目录下,安装的程序组件保持默认即可

- 下一步到确认安装界面,点击 Install按钮安装即可,如下图所示

- 安装完成,点击 Finish 按钮即可

安装语言包
双击打开语言包安装程序

点击下一步(Alt+N), 语言包会自动安装完成

配置
在空白处点击鼠标右键, 选择 --> TortoiseGit --> Settings, 然后就可以看到配置界面

选中General,在右边的 Language中选择中文. 不勾选自动升级的复选框,可能还需要指定 Git.exe 文件的路径
再次点击鼠标右键,可以看到弹出菜单中已经变成中文. 原来的 Settings 变成 设置; Clone 变为 克隆

基于 Docker 安装 GitLab
我们使用 Docker 来安装和运行 GitLab 中文版,由于新版本问题较多,这里我们使用目前相对稳定的 10.5 版本,docker-compose.yml
配置如下:
version: '3'
services:
web:
image: 'twang2218/gitlab-ce-zh:10.5'
restart: always
hostname: '192.168.75.145'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.75.145:8080'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- /usr/local/docker/gitlab/config:/etc/gitlab
- /usr/local/docker/gitlab/data:/var/opt/gitlab
- /usr/local/docker/gitlab/logs:/var/log/gitlab
安装完成后的工作
- 访问地址:http://ip:8080
- 端口 8080 是因为我在配置中设置的外部访问地址为 8080,默认是 80
- 初始化安装完成后效果如下:

- 设置管理员初始密码,这里的密码最好是 字母 + 数字 组合,并且 大于等于 8 位
- 配置完成后登录,管理员账号是 root

注意: 如果服务器配置较低,启动运行可能需要较长时间,请耐心等待
GitLab 的基本设置
GitLab 的基本设置
第一次使用时需要做一些初始化设置,点击“管理区域”-->“设置”

账户与限制设置
关闭头像功能,由于 Gravatar 头像为网络头像,在网络情况不理想时可能导致访问时卡顿

注册限制
由于是内部代码托管服务器,可以直接关闭注册功能,由管理员统一创建用户即可

GitLab 的账户管理
使用时请不要直接通过 root 用户操作,需要先创建用户,然后通过创建的用户操作,如果你是管理员还需要为其他开发人员分配账户
创建用户
点击“管理区域”-->“新建用户”

设置账户信息
同时你可以将自己设置为管理员

修改用户密码
由于我们创建时并没有配置邮箱,所以还需要重新编辑用户信息并手动设置密码


退出并使用新账户登录

注意:创建完账户,第一次登录时还会提示你修改登录密码
GitLab 创建第一个项目
点击 +
号 --> 新建项目

输入项目名称及描述信息,设置可见等级为私有,这样别人就看不见你的项目

初始化项目
我们选择通过增加一个 README 的方式来初始化项目

直接提交修改即可

使用 SSH 的方式拉取和推送项目
生成 SSH KEY
使用 ssh-keygen 工具生成,位置在 Git 安装目录下,我的是 C:\Program Files\Git\usr\bin
输入命令:
ssh-keygen -t rsa -C "your_email@example.com"
执行成功后的效果:
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Program Files\Git\usr\bin>ssh-keygen -t rsa -C "topsale@vip.qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Lusifer/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Lusifer/.ssh/id_rsa.
Your public key has been saved in /c/Users/Lusifer/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cVesJKa5VnQNihQOTotXUAIyphsqjb7Z9lqOji2704E topsale@vip.qq.com
The key's randomart image is:
+---[RSA 2048]----+
| + ..=o=. .+. |
| o o + B .+.o.o |
|o . + +=o+.. |
|.= . oo... |
|= o So |
|oE . o |
| .. .. . |
| o*o+ |
| *B*oo |
+----[SHA256]-----+
C:\Program Files\Git\usr\bin>
复制 SSH-KEY 信息到 GitLab
秘钥位置在:C:\Users\你的用户名\.ssh
目录下,找到 id_rsa.pub
并使用编辑器打开,如:

登录 GitLab,点击“用户头像”-->“设置”-->“SSH 密钥”

成功增加密钥后的效果

使用 TortoiseGit 克隆项目
- 新建一个存放代码仓库的本地文件夹
- 在文件夹空白处按右键
- 选择“Git 克隆...”

- 服务项目地址到 URL

- 如果弹出连接信息请选择是

- 成功克隆项目到本地

使用 TortoiseGit 推送项目(提交代码)
- 创建或修改文件(这里的文件为所有文件,包括:代码、图片等)
- 我们以创建
.gitignore
过滤配置文件为例,该文件的主要作用为过滤不需要上传的文件,比如:IDE 生成的工程文件、编译后的 class 文件等 - 在工程目录下,新建
.gitignore
文件,并填入如下配置:
.gradle
*.sw?
.#*
*#
*~
/build
/code
.classpath
.project
.settings
.metadata
.factorypath
.recommenders
bin
build
target
.factorypath
.springBeans
interpolated*.xml
dependency-reduced-pom.xml
build.log
_site/
.*.md.html
manifest.yml
MANIFEST.MF
settings.xml
activemq-data
overridedb.*
*.iml
*.ipr
*.iws
.idea
.DS_Store
.factorypath
dump.rdb
transaction-logs
**/overlays/
**/logs/
**/temp/
**/classes/
- 右键呼出菜单,选择“提交 Master...”

- 点击“全部”并填入“日志信息”

- 点击“提交并推送”

- 成功后的效果图

查看 GitLab 确认提交成功

实战
分支合并&冲突解决
场景:两个团队同时拉分支修改一个项目,合并代码时出现冲突
- 创建两个分支,team1、team2,并推送到服务器
- 两个分支修改同一个源码文件并推送到服务器
- 主干先合并分支team1,推送到服务器,然后再合并team2
-
解决冲突、编辑冲突并且再次提交 (右键编辑冲突, 右键使用此文本块,然后保存)
编辑冲突
- 再次提交完成合并,并推送到服务器
GitLab 使用 SSH 免密登录
本节视频
常见错误
Error: disconnected no supported authentication methods available
网友评论