1. 关于 Git 你应该知道的东西Git 是一个分布式版本控制系统。分布式的意思是,每个人电脑上都是一份完整的代码库,包含了所有的代码提交历史。 重要概念:本地一个代码库,对本地文件的所有操作,最后都是提交到这个代码库中。同时可以设置多个远程(remote,默认的remote通常用origin表示),当你要将代码更新到服务器上时(称作push),就通过设置的remote,更新到指定的服务器。
1.1 一些术语
1.2 工作流程
1.3 Gitlab 可以做什么Gitlab 是 Git 服务端的集成管理平台,提供了:
目前官方没有中文版,有个人汉化版本,一些地方对中文的支持较不好(详见后续章节),如果有需要中文翻译的地方,可以自己修改对应的代码。 怎么安装和维护 Gitlab,请看我另外的两篇博客 2. 安装与配置需要安装以下工具:
Git 图形界面操作工具
TortoiseGit只有 Windows 版本,有32位和64位版本,请根据自己的电脑选择相应的版本,同时下载对应版本的中文语言包。 2.1 设置 TortoiseGit 中文语言右键 -> TortoiseGit -> 设置 2.2 设置用户名和邮箱点击 2.3 设置保存密码默认情况下,Git 客户端每次与服务器交互,都需要输入密码。但是我们可以配置保存密码,只需要输入一次,就不再需要输入密码。 选择
2.4 配置 SSH KeyGit 可以通过 HTTP 和 SSH 的方式连接,如果要使用SSH的方式连接,需要确保自己的 IP 有访问 Gitlab 服务器 22 端口的权限。 通过 SSH 的方式,可以不用每次与服务器进行交互时都需要输入用户名和密码。如果是 IDE 中的 Git 插件,则有保存密码的功能。 2.5 生成 SSH Key2.5.1 在 Git Bash 命令行下生成鼠标右键 -> Git Bash
生成后的公钥会存放在
2.5.2 在可视化工具下生成
鼠标右键 -> Git Gui 帮助 -> Show SSH Key 点击 Generate Key,弹出一个对话框,提示输入 passphrase(密码短语),需要输入两次。意思就是以后提交数据到服务端,只要输入这个密码短语就可以了。这里可以为空,直接点OK,这样,以后就不需要输入任何密码。但建议还是要输入密码短语。 复制 SSH Key 的公钥 2.6 在 Gitlab 上配置 SSH Key配置好 SSH Key 以后提交代码,可以不用输入密码。点击右上角的资料设置 -> SSH 密钥 -> 增加 SSH 密钥 粘贴刚刚复制的 SSH Key 公钥,标题为可选,不写会自动生成 2.7 配置 Gitlab2.7.1 上传个人头像请上传个人头像,主要是为了易于识别用户。 2.7.2 设置邮件通知如果不想收到邮件通知,可以设置关闭。但是建议开启邮件通知。 3. Git 基本功能简介3.1 我是项目的创建者,我要创建项目3.1.1 在 Gitlab 上执行创建新项目
项目创建完成后,需要初始化,请保留该页面,在必要时复制项目的 SSH 地址
3.1.2 初始化项目以下这些操作,需要在项目的目录下进行。请注意如果你的项目文件夹路径包含中文,请使用 TortoiseGit 工具来操作,不要使用 Git Gui,否则会出现错误。 3.1.3 创建一份排除版本控制的文件类型清单在项目中,实际上有很多文件是不需要版本控制的,例如编译过程中生成的中间文件 我们只要在项目的目录下,放一个 这份 Github 上面有一个 .gitignore 模板的项目 如果后续开发中有新类型的文件要排除,可以在文件上
3.1.4 创建一份 README.md 文件README.md 文件用来填写项目的描述和说明,会直接显示在 Gitlab 的项目文件页面,方便直接查看项目的描述信息。 3.1.5 在自己的电脑上创建版本库在项目目录下
这样就可以在当前文件夹创建一个 Git 版本控制的库,同时创建一个分支 master。
3.1.6 提交代码到本地版本库
选择要提交的文件,并填写描述信息 3.1.7 设置 remote将项目的 SSH 地址复制过来,并将默认的 remote 名称设置为 origin 如果提示是否关闭获取标签,也选择 No 3.1.8 推送到服务器上的版本库(push to remote)如果提示该服务器主机是未知的,请选择是,添加到已知主机列表
3.1.9 创建开发分支默认情况下,master 分支在 Gitlab 中是保护分支。保护分支只允许 Master 级别以上的用户才能 push 和 delete。而普通的开发人员(Developer 级别)是无法提交代码到 master分支的。
请在 Gitlab 中操作 3.2 我是开发人员,我要获取和提交代码3.2.1 克隆项目在一个空白的项目文件夹下,右键 -> Git克隆。
如果提示该服务器主机是未知的,请选择 3.2.2 检出开发分支Git 克隆默认会检出 master 分支,但是我们需要在开发分支中工作。 检查当前所在的分支
到这一步完成,你就可以在本地自由地做开发了 3.2.3 从服务器的代码库更新数据请注意,选择拉取功能,就不需要再执行合并。如果是获取,就需要再执行一次合并。两者的区别在于,拉取省略了合并的细节。 3.2.4 冲突与解决出现无法推送 试试拉取,但拉取的时候出现冲突,Merge conflict in test.html 这时候需要先解决冲突
上面那部分的内容是本地代码库,HEAD 所指向分支的代码,下面那部分的内容是服务器端代码库的内容
只需要决定最后的内容,然后删除冲突标记,例如,只剩下
删除完冲突标记后,需要右键空白的地方,点击 Git Add all files now
双击冲突的文件 点击保存
提交 推送
3.2.5 提交和推送代码到服务器的版本库请查看 3.2.3 和 3.2.5,注意选择正确的分支。 请注意:只有项目的 master 权限或者 owner 权限的人才能将代码推送到保护分支中,master 分支默认是保护分支。 发起合并请求 选择需要合并的分支,点击“比较分支”(需要先比较分支,可以查看到这两个分支的差异) 描述分支合并请求,然后指派给项目的管理员,项目管理员会收到合并请求的邮件 3.3 分支与标签3.3.1 创建分支与标签分支可以基于任意提交(commit)、已有分支、已有标签中创建。
创建完分支后,记得切换到正确的分支中去工作。 标签是只读的,通常只用来记录特定的历史时刻,如里程碑版本等,这是为了方便以后检出特定版本的代码。 3.3.2 推送分支或标签到服务器的版本库使用推送命令,可以将本地版本库中的分支推送到服务器的版本库中。如果要推送标签,请勾选 3.3.3 分支合并选择要合并到当前工作分支中的分支,例如当前所在的分支是 master,选择 develop,则会将 develop 中的代码合并到 master 中。
4 Gitlab 基本功能4.1 为项目写 WiKiWiKi 可以放项目的相关说明文档,包括部署手册,使用手册等等。 Gitlab 的 Wiki 使用了 Markdown 格式(是一种轻量级标记语言,可以使用易读易写的纯文本格式编写出排版漂亮的文档) 4.2 查看项目的标签信息在仪表盘中,点击项目 5 高级功能5.1 从SVN迁移到GitGit 最为重要的特性之一是名为 使用 TortoiseGit 的 Git 克隆,选择从 SVN 版本库 将代码克隆下来后,再设置下 Git 代码库的 remote,然后推送过去就可以了。 5.2 从 TFS 迁移到 Git需要使用工具 git-tfs,下载地址在这里 https://github.com/git-tfs/git-tfs/releases 请注意 v0.20.0 版本不支持 TFS 服务器是 2008 版本,如果是 TFS 2008,请选择 v0.19.2。 需要将 git-tfs 文件目录添加到环境变量。 还需要再安装 TFS Team Explorer。如果服务器是TFS 2008版本,必须确保自己的电脑上只能安装 TFS Team Explorer 2008,如果安装了 TFS Team Explorer 2013,则仍然会提示不支持 TFS 2008,无法正确使用 git-tfs。可以切换到虚拟机中,只安装 TFS 2008 中。 在 Git Bash 中输入如下命令
test_project 为项目在 TFS 上的名称,http://192.168.8.25:8080 为 TFS 的服务器地址。 5.3 比较版本差异右键,Tortoise Git -> 显示日志 按 Ctrl 鼠标左键选择两个版本,右键选择比较差异 右键选择要比较差异的文件,选择比较差异 TortoiseGit 可以比较 Word 文件的差异 文本文件的差异比较是这样的 5.4 删除分支当我们将分支合并到主分支,或者放弃该分支的时候,可以对分支进行删除操作。 在 TortoiseGit 上进行分支删除操作非常简单,首先打开 “CheckOut/Switch” 对话框,通过 “Switch to Branch” 更多按钮打开分支列表,或者通过菜单 “Browser References” 打开分支列表(默认该菜单是隐藏的)。选择相应的分支,单击右键,选择删除。 注意:
5.5 重置代码到以前的版本当我们发现当前的代码有问题,想回退到之前的版本时,可以使用重置版本。在项目目录下,
进入日志信息窗口,选择指定的版本
5.5.1 重置类型,soft, mixed, hard 的区别soft 不改动工作区和索引 假设有一些 commits
HEAD 指向 C, 并且暂存区(stage,或称为 index)matches C. 当使用 mixed 保持工作区不变,重置索引 当使用 (如果不知道怎么选,默认使用 mixed) hard 重置索引和工作区(丢弃所有本地变更) 当使用 6 Eclipse 中使用 EGit6.1 检出项目File/Import 6.2 更新和推送数据6.2.1 获取数据(fetch)
Gerrit 是基于 Git 的代码审核软件 选择远程代码库 自定义选择要获取的远程分支,该图是远程仓库中的所有 fetch 只是把服务端的代码更新,放到本地的代码库中,还需要与本地分支合并,才能真正将代码更新到工作目录中。 分支的合并也是在这里操作,注意上图中,当前是 master,然后要把 origin/master 合并到 master 中
6.2.2 推送(push)如果要删除分支,也可以在这里操作,Add delete ref specification 6.2.3 Fetch from Upstream, Push to UpstreamGit 可以同时设置多个远程分支,这里的 Upstream 可以简单的理解成是默认的远程分支,因为代码的版本历史,就像溪流不断向前,因此把代码源称为 Upstream(因为本地的代码 clone 自这里)。 6.3 解决冲突
修改左边的本地数据,修改好后
然后右键点击此冲突文件
再次将文件加入索引控制,此时文件已经不是冲突状态,并且可以进行提交并 push 到服务器端。一定要重新 commit,并 push 到服务端,才算真正解决冲突。 6.4 分支和标签创建分支 创建标签 6.5 reset 到某个版本 |
|
来自: hello_worldw6 > 《工具》