2.玩转代码托管
提供基于Git的在线代码托管服务
配置管理服务&git基本使用方法
1.怎样配置git环境
安装好git和ter之后,启动gitbash配置用户名和邮箱信息
通过putty key genetor生成SSH密钥
分别保存好私钥和公钥信息
复制出公钥信息
2.怎样上传代码到云端git
此时远程建立的项目已经克隆到本地了
把本地已经写好的代码粘贴到git项目下
push到云端git仓库
3.如何建立分支并解决单人冲突问题
转到featuire分支下,改一下文件信息
转回到master分支下,同样修改同一文件下相同的配置
推到本地代码仓库
将feature分支合并到当前的分支
此时显示冲突信息
此时可以看到master分支和feature分支已经合并到了同一节点
4.怎样解决多人冲突问题
A把界面改成黄色
B在本地把界面改成红色,并提交到了本地仓库
B在push之前,需要把master分支拉取到本地
显示了冲突信息
代码托管 CodeHub
代码托管(CodeHub)为软件开发者提供基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支/Code Review等功能
产品优势
跨地域协同开发
在线代码阅读、修改和提交,随时随地,不受限制; 在线分支创建、切换、合并,多分支并行开发,效率高; 支持Git-LFS,大文件存储无忧; 支持在线Code Review,团队协作利器
安全
分支保护防止分支被其他人提交或误删; IP白名单地域控制; 细粒度的权限管控; 代码加密传输和存储,云端存储,集中灾备,确保7×24小时高可靠性
基于代码的统计分析
代码仓库提交信息统计; 代码仓库贡献者计; 个人贡献里程碑
应用场景
协同开发
场景特点
异地开发协同效率低、代码合并冲突频繁
优势
面向中小企业、孵化中心,云端代码托管服务,实现协同开发
多分支管理功能和合并请求功能,彻底解决代码合并冲突的难题
高校教学
场景特点
缺少一站式研发工具链,搭建研发工具环境耗时,环境维护成本高;新的研发工具上手慢,学习成本高,不利于教学
优势
面向高校教师与学生,提供完整的代码托管服务,学生无需搭配
具备丰富的代码仓库模板,学生可快速上手
功能描述
仓库管理
面向管理员、项目经理提供创建仓库的功能,提供多种仓库模板供用户选择。只有管理员和项目经理才允许删除仓库
权限管理
面向管理员、项目经理提供权限管理功能,给项目成员分配管理员权限
成员管理
面向管理员、项目经理提供成员管理功能,可以同步项目成员、添加成员,删除成员等操作
分支保护
面向管理员、项目经理提供分支保护功能,分支保护可阻止管理者以外的人推送代码;阻止任何人强行推到到此分支;阻止任何人删除此分支。防止代码被其他人恶意提交或误删
合并请求
面向开发者,提供高可用的代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支管理(新建、切换、合并)等服务
安全管控
代码克隆支持Https传输,确保数据传输安全性
代码在线操作
支持在线代码阅读、修改、提交;在线分支管理,包含分支新建、切换、合并等操作。真正实现云端可视化的代码托管
统计服务
关键数据在仓库首页展示;代码仓库提交信息统计;代码仓库贡献者统计
代码托管服务概述
代码托管(CodeHub)是面向软件开发者提供的基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支等。代码一键下载到本地,基于Eclipse开发,开发完毕一键推送云端,实现线上线下协同开发。
代码托管具有以下特性:
在线代码阅读、修改、提交,随时随地开发,不受地域限制。
在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。
高可用的代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支等。
支持多分支并行开发、效率高。
分支保护,可防止分支被其他人提交或误删。
统计服务:关键数据在仓库首页展示、代码仓库提交信息统计、代码仓库贡献者统计。
安全可靠,资源隔离,网络隔离和安全组规则保护,远离病毒,木马骚扰,防DDoS攻击。
IP白名单地域控制和支持Https传输,拦截不合法的代码下载,确保数据传输安全性。
细粒度的权限管控,提供企业级的权限保护。
服务器统一维护,大幅降低成本。
支持重置密码,解决用户忘记密码之忧。
支持根据用户业务需求进行弹性伸缩,用户可以根据业务需求自行定义弹性配置和策略,满足业务需求的同时,减少资源投入。
研发数据加密传输和存储,数据云端存储,集中灾备,确保7×24小时高可靠性。
支持灵活计费模式根据需要购买,最大限度降低一次投入成本。
功能列表
操作概览
帮助用户,快速建立对代码托管的整体印象。例如一家新公司,进行常规操作设置后,能够将代码托管用起来。
背景信息
代码托管(CodeHub)为软件开发者提供基于Git的在线代码托管服务,包括代码克隆/下载/提交/推送/比较/合并/分支/Code Review等功能。
操作流程
介绍在代码托管中,代码托管的快速操作流程,如图1所示。
图1 操作流程
操作步骤
1.安装Git客户端,配置Git环境
如果没有安装Git客户端,请到https://git-scm.com/downloads下载最新版本。
安装完成,运行Git Bash,在弹出终端进行如下配置,配置开发者的用户信息:
git config –global user.name “username01”
git config –global user.email “abc123@huawei.com“
检查配置:输入git config -l命令可以正常显示“user.name”和“user.email”。
2.Git Bash生成密钥
ssh-keygen -t rsa -C “abc123@huawei.com“
3.添加SSH公钥
单击“代码托管”首页“设置我的SSH密钥 > SSH密钥管理 > 添加SSH密钥”,在“添加SSH密钥”页面的“密钥”中填写生成SSH密钥中已生成的公钥。
4.设置HTTPS密码
单击“代码托管”首页“设置我的HTTPS密码 > HTTPS密码管理 > 修改”可以根据需要修改HTTPS密码。
5.新建代码仓库
项目经理、项目创建者及开发人员在DevCloud首页单击“服务 > 代码托管 > 新建仓库”。
6.Pull代码到本地
Pull拉取代码库到本地,进行相应的Git操作,如Pull、Push、Clone等。
7.云端管理代码
单击代码托管首页已创建的代码仓库名称链接,进入代码仓库详情页面。
在代码仓库页面(云端)进行新建、编辑代码文件等操作。
从云端下载代码或提交本地代码文件。
用户指南
前置准备
Git客户端安装与配置
在客户端的Windows系统下进行代码托管前需要用到Git客户端进行操作,请事先确认客户端是否安装Git Bash、TortoiseGit工具。以下介绍Git Bash、TortoiseGit客户端的安装与简易配置。注意,代码托管暂不支持使用github desktop进行管理。
Windows – Git Bash客户端
如果您熟悉常用的Git命令,那么Git Bash将会是您Windows上最简洁、最高效的客户端。
1.安装
打开Git Bash官网下载链接根据您的系统位数下载32位/64位的安装包。https://git-scm.com/download/win
双击运行安装包,在弹出的安装窗口中一路单击“下一步(Next)”,最后单击“安装(Install)”即可完成,Git Bash客户端将会安装在默认的“C:\Program Files\Git”位置。
2.打开
单击Windows开始图标,在开始搜索栏中输入Git Bash,单击回车即可打开Git Bash客户端,建议将其固定到Windows的任务栏中。
3.配置
第一步需要您配置用户名和邮箱,在Git Bash中输入以下命令行:
git config –global user.name “<您的用户名>”
git config –global user.email “<您的邮箱>”
第二步需要您生成一对SSH密钥,用来和代码托管服务端进行鉴权认证,在Git Bash中输入以下命令行:
ssh-keygen -t rsa -C “<您的邮箱>”
然后输入3个回车(Enter键)即可,生成的SSH秘钥对默认在/.ssh/id_rsa、/.ssh/id_rsa.pub位置
到这里您已经安装好Git Bash客户端了,到快速上手一探究竟吧!
Windows – TortoiseGit客户端
如果您未熟悉常用的Git命令,或者是从熟悉的SVN客户端(TortoiseSVN)迁移过来的,那么TortoiseGit客户端将是您最佳的选择。Git中的TortoiseGit客户端相当于SVN中的TortoiseSVN户端。
1.前置条件
TortoiseGit是基于Git的客户端,需要先安装好Git客户端才能运行,请直接参照上一步Windows – Git Bash客户端进行安装。
2.安装与第一次启动
打开TortoiseGit官网下载链接,根据您的系统位数下载32位/64位的安装包。https://tortoisegit.org/download/
双击运行安装包,在弹出的窗口中一路单击Next,然后单击Install即可完成安装,最后单击Finish即会运行第一次启动引导。
在弹出的第一次启动引导中,会有Language语言选择、Git可执行路径配置(自动填充可用的Git路径)、配置用户名和邮箱,保持默认一路单击Next完成即可。
3.中文化(可选,推荐使用)
TortoiseGit的安装包默认为英文,可以从 TortoiseGit官网下载链接下载语言包(Language Packs),这里选择Chinese simplified语言包,下载对应的32位/64位的语言包然后双击运行,在完成之前勾选 “Configure TortoiseGit to use this language”即可完成汉化,如 图1所示。
图1 中文化
4.配置
TortoiseGit同样需要一个密钥来和代码托管服务端进行鉴权认证,并且需要基于Git的SSH密钥对来生成(即Git Bash客户端 – 配置中生成的“/.ssh/id_rsa”、“/.ssh/id_rsa.pub”),TortoiseGit密钥生成步骤如下:
单击Windows开始图标搜索PuttyGen并打开,在打开的窗口中单击“Load”按钮,选择文件类型为“All Files(.)”,然后在打开的“~/.ssh”目录下选择“id_rsa”文件,如图2所示。
图2 选择id_rsa文件
说明:
PuttyGen是TortoiseGit自带的一款功能强大并且小巧易用的公钥私钥生成工具软件,安装完TortoiseGit后即可在windows开始图标搜索到puttygen。需要注意的是TortoiseGit与Putty都有自带putygen是不会冲突的。
选择好SSH密钥文件(~/.ssh/id_rsa)后,就可以生成TortoiseGit的密钥文件了(.ppk格式),单击“Save private key”然后在弹出的窗口中输入文件名保存,如图3所示。
图3 保存文件
到这里您已经安装好TortoiseGit客户端了,到快速上手一探究竟吧!
Linux – Git客户端
1.Debian/Ubuntu系统
在终端中输入以下命令行安装:
apt-get install git
2.Fedora/Centos系统
在终端中输入以下命令行安装:
yum install git
3.更多操作系统请参见官网链接Download for Linux and Unix。https://git-scm.com/download/linux
Mac – Git客户端
Mac上安装Git最简单的方法是安装 Xcode Command Line Tools,Mavericks(10.9)或更高版本的系统中,在 Terminal 里尝试首次运行git 命令即可。 如果没有安装过命令行开发者工具,将会提示您安装。
如果您想安装更新的版本,可以使用二进制安装程序,官方维护的OSX Git 安装程序可以在 Git 官方网站下载,网址为https://git-scm.com/download/mac。
快速上手
- 仓库成员管理
添加仓库成员
1.仓库成员首先需要是项目成员,去到仓库所在的项目,单击“设置 > 成员”进行添加用户到项目下,如图1所示。
图1 添加成员
说明:
选择您想添加的用户进行添加即可,如果您还没有子用户,可单击右上角的“创建用户”,然后按指引创建。
2.用户已添加到项目中后,进入仓库添加成员:选择项目导航栏“ 代码 > 代码托管 ”菜单,搜索仓库,然后单击仓库名进入详情页面,点击导航栏“成员”按钮,如图2所示。
图2 仓库成员
3.在仓库的成员管理页面,勾选对应的用户,单击“确定”即可添加用户到仓库成员中,如图3所示。
图3 添加仓库成员
删除仓库成员
在仓库成员管理页面单击对应用户的 “移出成员”按钮即可删除仓库成员,如 图4所示。
图4 删除仓库成员
- 使用HTTPS协议设置免密码提交代码
前提条件
使用HTTPS协议访问代码仓库,需要设置SSH密钥/HTTPS密码。
使用HTTPS协议方式在进行Git clone、Git fetch、Git pull以及Git push等操作时,需要输入DevCloud中CodeHub的用户名和密码。
背景信息
为避免每次访问都输入用户名和密码,可以使用Git的凭证存储功能实现免密码访问(为保证该功能正常使用,建议安装 Git2.5以上版本),三种操作系统的设置方法如下:
Windows系统:使用HTTPS协议设置免密码提交代码
MAC系统:使用HTTPS协议设置免密码提交代码
Linux系统:使用HTTPS协议设置免密码提交代码
Windows系统如何使用HTTPS协议设置免密码提交代码
Windows系统设置免密码提交代码有两种方法,如下表表1所示。
表1 Windows系统设置免密码提交代码
方法 实现免密码访问操作说明
本地配置HTTPS密码
1.设置Git验证方式。
打开Git客户端:$ git config –global credential.helper store
2.创建“.git-credentials”文件。
在客户端输入命令:$ touch ~/.git-credentials
3.配置用户名和密码。
4.使用Git命令进行首次Clone或Push代码,根据提示填写用户名和密码。
5.打开“.git-credentials”文件,如果已在本地存储了用户名和密码,出现如下记录:
https://username:password@codehub-cn-northeast-1.devcloud.huaweicloud.com
安装winstore辅助工具
winstore辅助工具使用Windows Credential Store控制敏感信息,请到https://gitcredentialstore.codeplex.com下载。
如果安装结束后弹出如图1所示对话框,请将Git的安装路径添加到path环境变量中。
图1 Git Credentials
MAC系统如何使用HTTPS协议设置免密码提交代码
安装“osxkeychain”工具来实现免密码访问:
1.查找当前系统是否已经安装该工具:
$ git credential -osxkeychain
#Test for the cred helper
Usage: git credential -osxkeychain < get|store|erase >
2.如果该工具未安装,先获取安装包:
$ git credential -osxkeychain
#Test for the cred helper
git: ‘credential -osxkeychain’ is not a git command. See ‘git –help’.
$ curl -s -o
https://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain
#Download the helper
$ chmod u+x git-credential-osxkeychain
#Fix the permissions on the file so it can be run
3.将“osxkeychain”安装在Git的同一个目录下:
$ sudo mv git-credential-osxkeychain
“$(dirname $(which git))/git-credential-osxkeychain”
#Move the helper to the path where git is installed
Password:[enter your password]
4.使用“osxkeychain”工具将Git配置成免密码模式:
$git config –global credential.helper osxkeychain
#Set git to use the osxkeychain credential helper
说明:
第一次执行操作时会提示输入密码,输入后将由“osxkeychain”管理用户名和密码,后续再执行Git操作时将不再需要密码校验。
Linux系统如何使用HTTPS协议设置免密码提交代码
Linux系统提供两种可选的免密码访问模式:
cache模式:
将凭证存放在内存中一段时间,密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除:
$ git config –global credential.helper cache
#Set git to use the credential memory cache
通过timeout选项设置过期时间,单位为秒:
$ git config –global credential.helper ‘cache –timeout=3600’
#Set the cache to timeout after 1 hour (setting is in seconds)
store模式:
将凭证用明文的形式存放在磁盘 “home”目录下(默认是 “~/.git-credentials”),永不过期,除非手动修改在Git服务器上的密码,否则永远不需要再次输入凭证信息。 “git-credentials”文件内容如下:
https://username:password@codehub.devcloud.huaweicloud.com
保存退出后,执行如下命令即可完成:
#git config –global credential.helper store
后续处理
如果在使用HTTPS协议下载时提示“SSL certificate problem: self signed certificate”错误信息,请在客户端进行如下设置:
git config –global http.sslVerify false
- 部署密钥
前提条件
仓库部署密钥对仓库仅具有只读权限。
部署密钥不能与用户密钥重复。
不同仓库可以添加相同部署密钥,同一个仓库部署密钥不允许重复。
每个仓库最多只能部署10个密钥。
背景信息
部署密钥用于编译构建或发布。设置部署密钥后,在编译构建中可以通过该密钥自动获取仓库代码。
操作步骤
1.进入代码仓库详情页面。
2.单击上侧导航区“设置 > 安全管理 > 部署密钥”,进入“已部署密钥列表”页面。
3.单击“设置部署密钥”,弹出“设置部署密钥”页面,如图1所示。
图1 设置部署密钥
- SSH密钥/HTTPS密钥使用场景
SSH密钥/HTTPS密码的使用场景主要有三种,如表1所示。
表1 SSH密钥/HTTPS密码使用场景
场景 使用说明
如何使用SSH密钥和HTTPS密码上传下载代码
SSH和HTTPS是使用Git进行代码版本管理的两种连接方式:
选择SSH方式,需要代码托管中提示生成密钥并添加到系统中。
选择HTTPS方式,可通过DevCloud生成密码,直接在代码托管中获取HTTPS密码即可。
说明:
使用其中任何一种方式都可以进行代码的上传下载,密钥(密码)的设置根据您选择的连接方式设定即可。
代码仓库地址可在仓库详情页面,单击即可复制仓库地址。
如何使用SSH密钥建立每个仓库的连接
SSH密钥是在电脑与某个帐号下的代码托管服务之间建立安全连接,在一台电脑上配置了SSH密钥并添加公钥到代码托管服务中后,所有该帐号下的代码仓库与该台电脑之间都可以使用该密钥进行连接。
例如:我创建了三个代码仓库,就不需要为每个仓库都创建一个SSH密钥。
代码仓库添加了SSH密钥后,如何使用该密钥上传下载代码
SSH密钥在电脑和代码托管服务之间建立安全连接,不同的用户通常使用不同的电脑,在使用SSH方式连接代码仓库前需要在自己电脑配置各自的SSH密钥。
例如:我创建了一个代码仓库并添加了SSH密钥,就只能我自己使用该密钥上传下载代码;其他用户则不能使用该密钥上传下载代码。
- 设置分支保护
背景信息
通过对分支设置保护,可以保证安全性信息。并根据实际需要可以解除分支保护。
操作步骤
1.进入代码仓库详情页面。
2.单击上侧导航区“设置 > 仓库管理 > 保护分支管理”,进入“已保护分支列表”页面,如图1所示。
图1 已保护分支列表
3.单击保护分支所在行,可以设否保护分支,如图2所示。
图2 编辑保护分支
后续处理
可以根据实际需要解除分支保护:
单击保护分支所在行。
根据提示信息单击“确定”,解除对该分支的保护。
- IP白名单
IP白名单含义
IP白名单是对IP范围开设的白名单,通过设置IP白名单能大大增强您的仓库的安全性。
只有在IP白名单范围内的仓库访问才是允许的,除此之外其他IP发起的访问一律被拒绝。
IP白名单格式
IP白名单有3种格式,如表1所示。
表1 IP白名单格式
格式 说明
单个IP
这是最简单的一种IP白名单格式,如将您的个人家庭电脑的IP添加到白名单中,比如:100.10.11.123。
IP范围
当您拥有不止一台服务器而且他们的IP段是连续的,这时您可以添加一个IP白名单范围,比如:100.10.11.0 – 100.10.11.255。
CIDR格式(无类别域间路由)
当您的服务器在一个局域网内而且使用CIDR路由时,这时您可以指定局域网的32位出口IP以及一个指定网络前缀的位数。
从同一个IP发起的请求,只要网络前缀同您设定的前缀部分相同,即可视为来自同一授信范围从而被接受。
举例:比如100.10.11.11/12,这样即使在同一个IP局域网下的他人的服务器(网络前缀位数不是前25位)依然能够被拦截。
- 新建代码仓库
代码仓库就是代码托管的一切,让我们从新建代码仓库开始吧!
登录代码托管首页
登录华为云首页,单击工具栏“服务 > 代码托管”进入,如图1所示。
图1 代码托管
新建代码仓库
1.在代码托管服务首页单击“新建仓库”,即可进入“新建代码仓库”页面,如图2所示。
图2 新建仓库
2.选择普通新建,填写好仓库名与对应的项目,单击“确认”即可新建,如图3所示。
图3 普通新建
3.在新建跳转后的代码托管首页可看到仓库列表,随即会创建成功,如图4所示。
图4 仓库列表
到这里您已经新建了一个仓库,去设置您的SSH密钥/HTTPS密码吧!
- 设置SSH密钥/HTTPS密钥
后续需要在本地客户端进行代码仓库的克隆/推送,SSH秘钥和HTTPS密码是客户端和服务端交互的凭证,需要先对它们进行设置。
设置SSH密钥
SSH密钥是使用SSH协议和代码托管服务端交互的凭证,如果您使用windows下的Git Bash客户端并在Windows – Git Bash客户端中已经生成,此步骤可以略过。
1.打开Git客户端(Git Bash或linux的命令行窗口),输入以下命令行:
ssh-keygen -t rsa -C “<您的邮箱>”
然后输入3个回车(Enter键)即可,生成的SSH秘钥对默认在/.ssh/id_rsa、/.ssh/id_rsa.pub位置,如图1所示。
图1 生成SSH秘钥
2.添加SSH密钥到代码托管服务端
打开Git客户端(Git Bash或linux的命令行窗口),将SSH密钥(~/.ssh/id_rsa.pub)的内容打印出来,如图2所示。
cat ~/.ssh/id_rsa.pub
图2 添加SSH密钥
复制上述的SSH密钥内容,去到代码托管首页,单击“设置我的SSH密钥”按钮去到SSH密钥管理页面,单击“添加SSH密钥”进行添加。
进入SSH密钥管理页面,如图3所示。
图3 SSH密钥管理页面
单击“添加SSH密钥”按钮进行添加,粘贴上述复制的SSH密钥内容,单击“新建”即可,如图4 添加SSH密钥所示。
图4 添加SSH密钥
至此,您已经设置好了SSH密钥,您可以继续设置HTTPS密码,或到客户端克隆/推送。
设置HTTPS密码
HTTPS密码是使用HTTPS协议和代码托管服务端交互的凭证,设置步骤如下:
1.进入代码托管首页,单击“设置我的HTTPS密钥”,显示“HTTPS密钥管理”页面。
如果您是第一次进行设置,则输入2次HTTPS密码保存即可,如图5所示。
图5 HTTPS密码管理
如果您不是第一次进行设置,您需要输入旧密码与新密码然后保存,忘记密码单击“重置”即可,如图6所示。
图6 重置密码
到这里您已经设置好了HTTPS密码,去客户端克隆/推送一个仓库吧!
- 客户端克隆/推送
前提条件
请先确保您已正确设置了SSH密钥或HTTPS密码,请参见设置SSH密钥/HTTPS密码。
背景信息
除页面操作外,代码仓库的克隆/拉取/推送等操作都是在Git客户端完成的。下面就在Git客户端进行一次克隆/推送操作,其中包括克隆仓库、新建一个分支、新建一个文件、提交、推送仓库。
使用SSH协议:Windows – Git Bash客户端
1.克隆仓库
进入代码托管首页,单击仓库列表中的仓库名去到仓库详情页,点击右侧导航栏克隆/下载按钮,复制访问方式中的SSH链接,如图1所示。
图1 复制SSH访问链接
打开Git Bash客户端去到您的目录下,输入以下命令即可把仓库克隆下来,如图2所示。
git clone <您仓库的SSH下载链接>
图2 仓库克隆
说明:
客户在git clone 代码仓库时失败,请检查建立的SSH密钥/HTTP密码是否有误。常见Git命令请参详更多Git知识。
2.新建一个分支
进入到代码仓库目录,使用以下命令行新建一个新的分支,如 图3所示。
git checkout -b <您的分支名>
图3 新建分支
3.新建一个文件
使用以下命令行新建一个文件,如 图4所示。
echo “Welcome to DevCloud!” > newFile.txt
图4 新建文件
4.提交
以上两步新建了一个分支和一个文件,输入以下命令行查看当前仓库状态,如图5所示。
git status
图5 查看仓库状态
将新增的文件添加到Git工作区,并对本次的修改进行一次提交,如图6所示。
git add newFile.txt
git commit -m “<您对本次提交备注的信息>”
图6 提交
5.推送仓库
以上已经在新分支上进行了一次新的提交,现在可以把所做的更改推送到服务端,如图7所示。
git push origin <您的分支名>
图7 推送仓库
到这里您已经完成了在客户端克隆推送的操作,恭喜您完成了快速上手教程!
使用SSH协议:Windows – TortoiseGit客户端
1.克隆仓库
进入代码托管首页,单击仓库列表中的仓库名去到仓库详情页,点击右侧导航栏克隆/下载按钮,复制访问方式中的SSH链接,如图8所示。
图8 复制SSH访问链接
进入您的目录下,右键选择“Git克隆”菜单选项,如图9所示。
图9 Git克隆
在弹出的窗口中将上述复制的SSH地址粘贴到URL输入框中,勾选“加载Putty密钥”并选择先前生成的.ppk文件,最后单击“确定”,如图10所示。
图10 Git克隆设置
单击“确定”之后即开始克隆仓库,如果您是第一次进行克隆TortoiseGit客户端会询问您是否要保存服务端的指纹信息,单击“是”即可,如图11所示。
图11 克隆确认
开始克隆之后稍后即可完成,如图12所示。
图12 克隆日志
2.新建一个文件并提交到新分支
进入仓库目录,新建一个“newFile.txt”文件,并在里面书写一行文字,如图13所示。
图13 新建文件
新建好一个文件之后,就可以将其提交到仓库了,在目录下右键选择“Git -> master”进行提交,如图14所示。
图14 Git提交
在接下来的窗口中,将提交的目标分支从默认的master改为新建分支、然后填写本次提交的日志信息、接着勾选设置作者、然后在变更的文件列表中选择要进行提交的文件,最后单击“提交”即可,如图15所示。
图15 提交
3.推送仓库
经过以上步骤已经在一个新的分支上添加了一个文件,现在可以将本次更改推送到代码托管服务端。
在仓库目录下单击鼠标右键,单击“TortoiseGit > 推送”,如图16所示。
图16 推送
在弹出来的推送窗口中直接单击“确定”即可,如图17所示。
图17 推送设置
开始推送后稍后即可完成,如图18所示。
图18 推送日志
到这里您已经完成了在客户端克隆推送的操作,恭喜您完成了快速上手教程!
使用SSH协议:Linux/Mac
Linux/Mac上Git客户端的克隆操作和Windows – Git Bash客户端的操作完全一样。
使用HTTPS协议:Windows – Git Bash客户端
1.克隆仓库
进入代码托管首页,单击仓库列表中的仓库名去到仓库详情页,点击右侧导航栏克隆/下载按钮,复制访问方式中的HTTPS链接,如图19所示。
图19 复制HTTPS访问链接
打开Git Bash客户端进入您的目录下,输入以下命令进行仓库克隆,其中第一次克隆需要您填写用户名(账号名/用户名)和HTTPS密码,如图20所示。
git clone <您的HTTPS下载链接>
图20 克隆仓库
2.新建一个分支
进入到代码仓库目录,使用以下命令行新建一个新的分支,如 图21所示。
git checkout -b <您的分支名>
图21 新建分支
3.新建一个文件
使用以下命令行新建一个文件,如 图22所示。
echo “Welcome to DevCloud!” > newFile.txt
图22 新建文件
4.提交
以上两步新建了一个分支和一个文件,输入以下命令行查看当前仓库状态,如图23所示。
git status
图23 提交
将新增的文件添加到Git工作区,并对本次的修改进行一次提交,如图24所示。
git add newFile.txt
git commit -m “<您对本次提交备注的信息>”
图24 提交文件
5.推送仓库
以上已经在新分支上进行了一次新的提交,现在可以把所做的更改推送到服务端,如 图25所示。
git push origin <您的分支名>
图25 推送仓库
到这里您已经完成了在客户端克隆推送的操作,恭喜您完成了快速上手教程!
使用HTTPS协议:Windows – TortoiseGit客户端
克隆仓库
1.进入代码托管首页,单击仓库列表中的仓库名去到仓库详情页,点击右侧导航栏克隆/下载按钮,复制访问方式中的HTTPS链接,如图26所示。
图26 复制HTTPS访问链接
2.进入您的目录下,右键在弹出的菜单选项中选择“Git克隆”,如图27所示。
图27 Git克隆
在弹出的窗口中将上述复制的HTTPS地址粘贴到URL输入框中,然后单击“确定”,如图28所示。
图28 克隆设置
单击“确定”之后即开始克隆仓库,如果您是第一次进行克隆TortoiseGit客户端会要求您输入用户名和HTTPS密码,如图29所示。
图29 首次克隆提示
开始克隆之后稍后即可完成,如图30所示。
图30 克隆日志
3.新建一个文件并提交到新分支
进入仓库目录,新建一个“newFile.txt”文件,并在里面书写一行文字,如图31所示。
图31 新建文件
新建好一个文件之后,就可以将其提交到仓库了,在目录下右键选择“Git提交 ->master”进行提交,如图32所示。
图32 Git提交
在接下来的窗口中,将提交的目标分支从默认的master改为新建分支、然后填写本次提交的日志信息、接着勾选设置作者、然后在变更的文件列表中选择要进行提交的文件,最后单击“提交”即可,如图33所示。
图33 提交
点击放大
4.推送仓库
经过以上步骤已经在一个新的分支上添加了一个文件,现在可以将本次更改推送到代码托管服务端。
在仓库目录下右键选择“TortoiseGit > 推送”,如图34所示。
图34 推送
在弹出来的推送窗口中去掉“自动加载Putty密钥”的勾选,然后单击“确定”即可,如图35所示。
图35 加载Putty密钥
开始推送后稍后即可完成,如图36所示。
图36 推送日志
到这里您已经完成了在客户端克隆推送的操作,恭喜您完成了快速上手教程。
进阶操作
导读
进阶操作主要包括:代码评审、仓库迁移、权限管理、代码开发、代码冲突、仓库备份相关的高级操作。
代码评审
- 流程
代码托管的主干维护、分支开发的流程如图1所示。
图1 代码评审流程
说明:
该流程仅为一种简单场景,不同场景各有差异,请结合实际情况操作。
- 新建合并请求
背景信息
请根据实际需要新建合并请求或通过比较分支创建合并请求合并代码。
操作步骤
1.进入代码仓库详情页面。
2.单击上侧导航区“合并请求”,进入合并请求页面。如图1所示。
图1 合并请求页面
3.单击“新建合并请求”,进入“新建合并请求”页面,如图2所示。
图2 新建合并请求
4.选择分支后,单击“下一步”,根据提示完成合并。
5.(可选)进入合并请求详情页,显示“评论记录”,如图3所示。
图3 评论记录
6.单击,显示评论所在的代码行图4所示。
图4 评论所在代码行
- 合并请求的评分机制
背景信息
在开发人员发起一个新的合并请求之后,项目组的成员,可以为合并请求评分。
操作步骤
1.在每一个合并请求右上角,都会有一个打分区域(默认为收拢状态),单击评分展开评分区域,如图1所示。
图1 评分
2.(可选)在仓库的设置页面,可以设置合并请求的“允许合入的最低评分”,如图2所示。
图2 允许合入的最低评分
说明:
设置目的为:
当一个项目组人员较多时,我们希望能够有更多的人来共同检视一段代码,以确保代码的正确性。
最低合入评分≥3,就意味着至少有2个人评分,才能合入。
仓库迁移
- 将SVN代码仓库迁移到Git代码库
背景信息
代码托管服务提供基于Git的分布式版本控制管理服务,能够更加便捷的进行异地协作。虽然不支持SVN库,但可以将SVN代码库转换为Git仓库迁移到DevCloud中。
操作步骤
1.查看SVN路径下需要转换的库或目录。
例如:“https://localhost:8443/svn/test/–no-metadata–trunk=trunk test”。
说明:
no metadata:阻止Git导出SVN包含的附加信息,使提交到Git的记录很干净。
trunk:主分支。
test:创建的Git项目名称。
2.在本地新建文件夹,用于存放转换后的SVN库。
cmd模式
mkdir E:\devcloud\test\svn\
cd E:\devcloud\test\svn\
bash模式
mkdir -p E:/devcloud/test/svn/
cd E:/devcloud/test/svn/
3.克隆SVN代码。
使用git-svn转换工具将SVN转换成Git库:
git svn clone “https://localhost:8443/svn/test/–no-metadata–trunk=trunk test”
说明:
路径中如果有空格使用““””。
执行过程可能会提示输入SVN帐户,根据提示输入用户名和密码。
文件夹下如果存在“.git”文件夹,说明本地库转换成功,可以使用git log查看记录。
4.新建DevCloud代码仓库,并关联云仓库中。
即选择要提交的代码仓库,将本地的代码库添加到远端库:
git remote add origin git@gitlab.xxx.com:first/test.git
说明:
“git@gitlab.xxx.com:first/test.git”为云仓库地址。
5.将SVN代码库同步到云仓库中。
拉取远端的代码到本地:
git pull origin master //origin:起源
推送代码到远端:
git push origin master //master:主分支
- 将在线的SVN/Git代码仓库迁移
背景信息
现在已支持将您原有的SVN/Git仓库,一键导入CodeHub。
操作步骤
1.在新建代码仓库时,选择“导入仓库”,如图1所示。
图1 导入仓库-SVN协议
2.选择SVN协议或Git协议即可,如图2所示。
图2 导入仓库-Git协议
- 将本地Git库上传到代码托管仓库
背景信息
在本地Git上开发好代码后,可以上传到云端代码托管的代码仓库(Git仓库)。
操作步骤
1.在代码托管中新建代码仓库“Repo1”。
2.将本地的仓库目录变为Git仓库。
$ git init
3.进入本地仓库目录选择要提交的代码仓库。
4.将本地仓库添加到远端仓库。
$ git remote add origin git@devcloud.huawei.com:testtransfer/Repo1.git
5.拉取远端的代码到本地。
$ git pull origin master
6.推送全部代码到远端仓库。
$ git push origin master
- 将代码托管的代码仓库克隆到本地的git库
背景信息
在DevCloud代码托管中创建好代码仓库后,开发人员可以把云端代码克隆到本地使用。
操作步骤
1.确认密钥成功配置(“SSH”或“HTTPS”类型)。
2.选择目标代码仓库。
3.复制代码仓库地址(“SSH”或“HTTPS”类型)进行Clone。
bash模式
git clone + 地址
客户端模式
鼠标右键,单击“Git Clone”,如图1所示。
图1 Git Clone
将复制好的代码仓库地址粘贴到如图2所示的位置,单击“OK”按钮。
图2 Clone代码库
-
通过EFit插件导入远端工程
1.选择从Git导入工程,如图1所示。
图1 Import
2.填入工程信息,如图2所示。
图2 Import Projects from Git—Source Git Repository
说明:
URI:“git@codehub-rnd-devcloud.huawei.com:gitlab/gitlabtests.git”(示例)
Protocol:ssh
Port:22
User:git(Password根据生成Key的设置确定,一般不需要密码。)
3.根据实际情况勾选分支,如图3所示。
图3 Branch Selection
4.下载分支到指定目录,如图4所示。
图4 Local Destination
5.导入Eclipse,请根据实际情况确定导入方式,如图5所示。
图5 Select a wizard to use for importing projects
说明:
前面步骤1~4相当于拉取远端库到本地,可以在本地选择的目录看到下载的项目。
如果Git库上没有工程文件,需要选择“Use the New Project wizard”(新建项目方式),需要实际项目maven、java、web等类型导入相应类型的项目。 -
Eclipse对接代码托管
背景信息
Eclipse安装Git插件EGit后,可以完全对接代码托管,如将本地Git仓库代码完整提交到远程Git仓库中。
说明:
Eclipse 4.4版本已天然支持Git插件(在Eclipse3.3版本没有自带EGit插件,无法安装)。
步骤一:在Eclipse上安装Git插件EGit
以Eclipse的版本“eclipse-java-helios-SR2-win32.zip”为例,具体操作如下:
1.在Eclipse上方工具栏选择“Help > Install New Software…”菜单,如图1所示。
图1 Install New Software
2.在弹出的“Install”窗口中,单击“Add…”按钮,如图2所示。
EGit插件地址为:http://download.eclipse.org/egit/updates。
图2 Add Site
3.单击“OK”按钮,随后连续下一步默认安装即可。
安装完成后重启Eclipse。
步骤二:在Eclipse中配置EGit
1.在Eclipse上方工具栏选择“Window > Preferences > Team > Git > Configuration”,如图3所示。
“user.name”为已注册的用户名。
图3 Add a Configuration Entry
2.单击“OK”,如图4所示。
“user.email”为已绑定的邮箱。在这里配置“user.name”即可。
图4 Configuration
步骤三:新建项目,并将代码提交到本地的Git仓库中
1.新建项目“git_demo”,并新建“HelloWorld.java”类,如图5所示。
图5 新建项目
2.将“git_demo”项目提交到本地仓库,如图6所示。
图6 Share Project
3.在弹出的“Share Project”窗口中,选中“Git”,如图7所示。
图7 Share Project
4.单击“Next”,弹出“Configure Git Repository”,如图8所示。
图8 Configure Git Repository
5.单击“Create Repository”,成功创建Git仓库。
文件夹此时处于“untracked”状态(文件夹中的符号“?”表示)。
此时需要提交代码到本地仓库,如图9所示开始提交。
图9 Commit
6.弹出“Commit Changes”窗口,设置提交信息,如图10所示。
图10 Commit Changes
7.单击“Commit”,代码提交到本地仓库,如图11所示。
图11 Commit
步骤四:将本地仓库代码提交到远程的Git仓库中
1.在DevCloud的代码托管中创建仓库。
创建好远程仓库后,进入远程代码仓库详情页面,可以单击复制远程仓库地址。
2.选择Push菜单,开始将代码提交到远程仓库,如图12所示。
图12 Push菜单
3.在弹出的“Push to Another Repository”窗口中,设置相应参数,如图13所示。
图13 Push to Another Repository
4.单击“Next”,弹出“Push Ref Specifications”,如图14所示。
图14 Push Ref Specifications
5.单击“Add Spec”,成功添加如图15所示。
图15 Add Spec
6.单击“Next”,弹出“Push Confirmation”窗口,如图16所示。
图16 Push Confirmation
7.单击“Finish”提交本地代码,如图17所示。
图17 提交本地代码
8.单击“OK”,完成代码提交远程仓库。
登录远程仓库地址(如 “https://codehub.devcloud.huaweicloud.com/wenchao523/git_demo”)核对提交的代码。
说明:
如果是首次提交:
第一步:先在本地建立一个一样的仓库,称本地仓库。
第二步:在本地进行Commit,将更新提交到本地仓库。
第三步:将服务器端的更新Pull到本地仓库进行合并,最后将合并好的本地仓库Push到服务器端,即进行一次远程提交。
如果非首次提交:
第一步:将修改的代码Commit更新到本地仓库。
第二/三步:将服务器端的更新Pull到本地仓库进行合并,最后将合并好的本地仓库Push到服务器端。
代码开发
- 提交历史
背景信息
开发人员可以查看每次提交代码的历史列表。
操作步骤
1.进入代码仓库详情页面,并在仓库详情页面提交代码。
2.单击左侧导航区“文件 > 历史”,显示“历史列表”页面,如图1所示。
图1 历史列表
3.根据实际情况可以选择分支、起始时间进行过滤。
4.单击历史记录“提交号”可以查看提交详情。
- 新建分支
背景信息
分支是用来将特性开发绝缘开来的。使用分支意味着把工作从开发主线上分离开来,以免影响开发主线。
在创建仓库时,master是默认的主分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
操作步骤
代码托管新建分支的场景及操作方法如表1所示。
表1 新建分支场景
场景 操作方法
远程仓库(云端)
1.进入代码仓库详情页面。
2.单击远程仓库左侧导航区“分支”,显示“分支列表”页面,如图1所示。
图1 分支列表
3.单击“新建分支”。
本地仓库(新建分支再Push到远程仓库)
Git客户端
1.在master或其他分支下(本地分支),输入命令git checkout -b slave新建一个分支。
2.输入命令git push origin slave把分支推送到远程仓库。
EGit客户端
1.登录Git仓库页面,单击“branchs > local”。
2.选中“master”右键选择“新建分支”,输入分支的名称。
3.单击“确定”(默认在master下新建分支)。
4.选中新分支,右键选择“push branch”,推送分支到远程仓库。
TortoiseGit客户端
1.选中本地库,右键选择“tortoiseGit > create branch”新建分支。
2.切换到新分支上,右键选择“push branch”,推送分支到远程仓库。
- 创建标签
背景信息
Git标签通常用来标记发布里程碑(如v1.0),可以给历史中的某一个提交打上标签,以示重要。
操作步骤
代码托管创建标签的场景及操作方法如表1所示。
表1 创建标签场景
场景 操作方法
远程仓库(云端)
1.进入代码仓库详情页面。
2.单击远程仓库左侧导航区“标签”,显示“标签列表”页面。
3.单击“新建标签”新建Git标签(如v1.0)。
已创建的标签显示在标签列表中。
4.(可选)单击可以删除标签。
本地仓库(新建标签再Push到远程仓库)
Git客户端
1.在master分支上,输入命令git tag -a V2.0.1 -m“V1.0.0版本”(-a 加标签 -m 加标签注释)新建标签。
2.输入命令git checkout V1.0.0切换到标签V1.0.0上。
3.输入命令git push origin V1.0.0或git push origin –tags到远程仓库。
EGit客户端
1.选中Git仓库视图的“Tags”右键选择“Create tag”新建标签。
2.输入标签的名称以及注释。
3.切换到标签上。
4.右键选择“remote > push”,选择添加所有tags,标签即被推送到远程仓库。
TortoiseGit客户端
1.选中本地库master分支,右键选择“tortoiseGit > Create tag”。
2.输入标签的名称以及注释。
3.切换到标签上。
4.右键选择“remote > push”,选择添加所有tags,标签即被推送到远程仓库。
- 分支对比
1.进入代码仓库详情页面。
2.单击仓库导航区“文件 > 对比” 显示“分支对比”页面,可以对比已有分支,如图1所示。
图1 分支对比
3.选择需要比较的分支后,单击“对比”即显示对比结果。 - 合并分支
背景信息
使用其他分支进行开发后,需要将它们合并到主分支(默认master为主分支)上。
操作步骤
代码托管合并分支的场景及操作方法如表1所示。
表1 合并分支场景
场景 操作方法
远程仓库(云端)
远程仓库合并分支,master/slave分支有新增的文件,需要把slave/master合并到master/slave:
1.分支对比。
比较从“slave”到“master”的不同,分支不同可进行合并。
2.合并分支。
把源分支(master/slave)合并到目标分支(slave/master)上,合并完成后slave/master会有新增的文件。
本地仓库(合并分支再Push到远程仓库)
Git客户端
1.在master分支上,master和其他分支是不同的分支(本地分支),输入命令git merge slave,进行本地分支合并。
2.输入命令git push origin master把分支推送到远程仓库,master上的文件即为合并后的。
EGit客户端
1.选中本地库,切换到master分支,单击“team”右键选择“merge”。
2.选择devlop分支,进行本地分支的合并。
3.Push master分支到远程仓库。
TortoiseGit客户端
1.选中本地库master分支,右键选择“tortoiseGit > merge”。
2.选择devlop分支,进行本地分支的合并。
3.右键选择“push branch”,推送分支到远程仓库。
- 仓库网络
背景信息
仓库网络即通过“仓库网络时间轴”可以查看仓库关系。
操作步骤
1.进入代码仓库详情页面。
2.单击左侧导航区“仓库网络”,显示“仓库网络时间轴”,如图1所示。
图1 仓库网络时间轴
- 仓库统计
背景信息
按照贡献者的提交次数、添加代码行数或删除代码行数以及不同维度显示提交统计。
操作步骤
1.进入代码仓库详情页面。
2.单击左侧导航区“仓库统计”,该页面由“语言统计”,“贡献者统计”,“提交统计”3部分组成,如图1所示。
图1 代码仓库趋势图
3.“提交统计”页面显示不同维度的提交统计,如图2所示。
图2 提交统计
4.“语言统计”页面,显示不同语言的提交统计,如图3所示。
图3 语言统计
代码冲突
- 代码冲突分析
背景信息
提交代码时,常常会出现冲突,尤其是协同开发的情况。例如,共同维护一个工程模块,均把测试项往上提交,可能会涉及到一些公共接口文件以及资源文件提交,不可避免的会发生这些文件的提交冲突。
开发代码过程中,需要遵循Git使用规范,以减少产生冲突的情况。提交代码之前,请做如下操作:
操作步骤
1.查看目前代码的修改状态,运行git status命令检查目前所做的修改。
已暂存 (changes to be committed)
已修改 (changed but not updated)
未跟踪 (untracked files)
2.查看代码修改内容。
比较某文件与最近提交节点的差异:git diff
比较某文件在提交节点a、节点b的差异:git diff
说明:
如果该文件已暂存,则git diff –cached。
如果省略后面一个“hashcode”,则默认表示与上一提交节点比较(也可以利用^运算符)。
3.暂存需要提交的新建、修改或删除文件。
新建的文件:git add
修改的文件:git add
删除的文件:git rm
4.提交已暂存的文件:git commit
说明:
注意注释填写规范。如果提交注释书写有误或漏提文件,可以使用命令:git commit –amend(修改最近一次提交)。
5.同步到服务器。
将服务器代码同步到本地:git pull
同步到服务器:git push origin <本地分支名>
说明:
如果git pull失败,请按照提示还原有冲突的文件,再次尝试同步:git checkout – <有冲突的文件路径>
- 解决多人提交代码产生的冲突与覆盖
背景信息
开发人员A请求worker1往master上merge,开发人员B请求worker2也往master上merge。即,A和B两位开发者有可能都改了同一个文件,就可能会产生冲突。此时,master分支上就可能会出乱。
对于提交代码到Git服务器,多人修改了分支文件时,merge过程会产生文件内容冲突。Git通过Merge Request的思路来解决类似的冲突。下面介绍如何进行Merge Request,让master上的分支一直正确,不产生冲突。
操作步骤
1.开发者做完了一天的工作,在worker1(L)分支上开发完代码。
2.Checkout到master(L)上,Pull一下,把服务器上master的代码拉下来,保证本地master(L)是最新master代码。
3.Checkout回worker1(L)分支,将master(L)分支merge到worker1(L)上。
说明:
该步骤可能会发生冲突:因为在开发者下班之前,worker2分支的同事可能已提交代码并更新master,而恰巧修改了同一个文件。此时冲突发生在本地(不要紧)。
4.(可选)解决本地冲突。
5.Push代码到worker1分支,再提Merge Request。
说明:
此时就不会使服务器上的master产生代码冲突了;因为在本地解决冲突时,Git就已经知道产生冲突以后该怎么做,而又把这些脚本Push到了服务器的worker1分支上,那么服务器的worker1分支在往master分支合并时自然就知道该怎么做。
后续处理
当您早上来上班时,尽量先checkout到master(L),pull一下,再checkout回worker1(L),把master(L)分支的内容merge过来,完成之后再进行开发。这样就尽量保持在昨晚之后的最新代码上进行开发,以减少产生冲突的可能性。
仓库备份
打包(下载)代码仓库
背景信息
在DevCloud代码托管中创建好代码仓库,并开发好代码后,开发人员可以根据需要对云端仓库代码进行打包下载。
操作步骤
1.进入目标代码仓库详情页面。
2.单击右侧导航栏的“克隆/下载”按键,如图1所示。
图1 下载文件
3.选择文件包下载格式(如“zip”),将仓库代码以zip格式文件(如“CodeHub01-master-xxxx.zip”)下载到本地。
Git Submodule操作
背景信息
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。 Git通过子模块来解决这个问题。 子模块允许你将一个Git仓库作为另一个Git仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
这时存在一个名叫“.gitmodules”的文件,其中的内容可能是这样的:
[submodule “module_name”]
path = file_path
url = repo_url
这时,位于“file_path”目录下的源代码,将会来自“repo_url”。
Web 操作
页面添加子模组
页面上可以在根目录和多级目录下新建子模组。
根目录添加子模组
非根目录添加子模组
页面查询子模组状态、更新、删除子模组
管理员可以通过查看“设置”页面下“子模组管理”页面,查看子模组状态,更新子模组,删除子模组。
页面同步部署秘钥
对于客户端提交的子模组,需要仓库管理员再在“设置”页面下“子模组管理”页面,将父仓库的部署秘钥同步到子仓库中,从而保证在构建父仓库是,可以将对应提交的子仓库一同拉取下来。
Git客户端操作
添加 Submodule
git submodule add [
] [-b ] [
之后通过git命令将变更推送到远端。
示例
git submodule add git@codehub.devcloud.huaweicloud.com:b1625f025a4a476fbdc0ee9b5ae99b62/WEB-INF.git
拉取包含submodule的仓库
git clone [
] –recursive
示例
git clone git@codehub.devcloud.huaweicloud.com:b1625f025a4a476fbdc0ee9b5ae99b62/WEB-INF.git –recursive
获取远端Submodule更新
git submodule update –remote
推送更新到子库
git push –recurse-submodules=check
删除 Submodule
1.删除“.gitsubmodule”中对应submodule的条目。
2.删除“.git/config”中对应submodule的条目。
3.执行git rm –cached {submodule_path}。
说明:
路径不要加后面的“/”。
示例:你的submodule保存在“src/main/webapp/WEB-INF/”目录,则执行命令为: git rm –cached src/main/webapp/WEB-INF
更多子模组相关内容
更多详情请参见官方文档《Git 工具 – 子模块》。
使用技巧
- 如何查看用户下载代码历史记录
拥有仓库管理员权限的用户,可以仓库详情页面选择“设置 > 安全管理 > 操作日志”,查看相关的各项记录。 - 如何查看代码提交新增的行数
进入代码仓库详情页。
选择“仓库统计”页签,在“贡献者统计”区域可查看本次提交中增删了多少行代码,如图1所示。
图1 贡献者统计
- 如何克隆代码仓库
背景信息
在代码托管中,可以直接Fork已有代码仓库。
操作步骤
1.登录代码托管首页。
2.单击代码仓库所在行的结尾处“更多”按键,选择“Fork代码仓库”
进入“Fork代码仓库”页面,如图1所示。
图1 Fork(复制)代码仓库
3.设置“项目名”与“仓库名”后,单击“确定”,可以Fork代码仓库,即复制代码仓库。
说明:
复制代码仓库完成后,请根据需要设置代码仓库成员。
- 如何设置普通仓库成员可以push代码到云端仓库
DevCloud提供了分支保护设置,通常情况下代码仓库的master默认为受保护状态,限制普通仓库成员推送代码。
可以代码仓库详情页修改分支保护设置,详见设置分支保护。
- 如何将提交的代码关联到工作项
背景信息
在代码托管中,提交代码时,可以实现代码与工作项的关联。
关联成功后,可以根据需要查看代码提交记录与工作项之间的关联关系。
如何将提交的代码关联到工作项
代码提交信息按照fix #工作项编码格式书写,即可实现代码与工作项的关联。
例如:工作项编码为“4567”,提交的代码用来解决IE浏览器的显示问题,将代码关联到工作项的操作如表1所示。
表1 代码关联工作项
场景 操作
Git客户端
使用命令$ git commit -m “fix #4567 解决IE浏览器显示问题”,再进行代码上传。
远程仓库(云端)
在云端编辑或上传代码文件时,在提交信息框内使用 fix格式(如 fix #4567 解决IE浏览器显示)关联项目中的工作项。
说明:
使用fix填写提交信息的场景包括:新建、编辑、修改、删除文件以及本地Git客户端提交(Commit)代码。
如何查看提交代码与工作项的关联关系
代码提交记录与工作项之间的关联关系,可以通过如表2所示方法查看。
表2 代码关联关系
场景 操作
项目管理
1.在项目管理中查找目标项目。
2.进入工作项详情,在页面下方找到“代码提交记录”页签,单击记录中的代码仓库节点链接(数字串),即可定位到对应代码,如图1所示。
图1 代码提交记录
代码托管
1.在代码托管中查找目标仓库。
2.单击目标仓库所在行进入目标仓库详情页面,选择“关联工作项”页签,可以查看代码提交关联的工作项,如图2所示。
图2 关联列表
更多git知识
Git客户端使用
背景信息
使用Git客户端前,需要了解Git安装、创建新仓库、检出仓库、工作流、添加与提交、推送改动、创建分支、更新与合并分支、创建标签、替换本地改动等基本操作。
前提条件
如果没有安装Git客户端,请到https://git-scm.com/downloads下载最新版本。
使用流程
Git客户端基本使用流程如图1所示。
图1 Git客户端基本使用流程
使用流程说明
操作步骤 说明
安装
根据需要安装对应版本:
Git Windows版
Git OSX版 OSX版 OSX版 OSX版
Git Linux版
新建仓库
创建新文件夹,打开,然后执行如下命令:
git init
以创建新的git仓库。
检出仓库
创建一个本地仓库的克隆版本,执行如下命令:
git clone /path/to/repository
如果是远端服务器上的仓库,命令为:
git clone username@host:/path/to/repository
工作流
本地仓库由Git维护的三棵“树”组成:
工作目录:持有实际文件。
缓存区(Index):像个缓存区域,临时保存做的改动。
HEAD:指向最近一次提交后的结果。
添加与提交
将改动内容添加到缓存区,使用如下命令:
git add
git add *
这是Git基本工作流程的第一步;使用如下命令提交实际改动:
git commit -m “代码提交信息”
此时改动已经提交到了HEAD,但是还没到远端仓库。
推送改动
改动内容目前已经在本地仓库的HEAD中。执行如下命令以将这些改动提交到远端仓库:
git push origin master
可以将master换成需要推送的任何分支。
如果没有克隆现有仓库,且需要将仓库连接到某个远程服务器,可以使用如下命令添加:
git remote add origin
将改动推送到所添加的服务器上。
创建分支
分支是用来将特性开发绝缘开来的。在创建仓库时,master是“默认的”主分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
1.创建一个名为“feature_x”的分支,并切换过去:
git checkout -b feature_x
2,。切换回主分支:
git checkout master
3.将分支推送到远端仓库(不推送该分支,就仅自己所见):
git push origin
4.再把新建的分支删掉:
git branch -d feature_x
更新与合并(分支)
1.更新本地仓库至最新改动,执行:
git pull
以在你的工作目录中获取(fetch)并合并(merge)远端的改动。
2.合并其他分支到当前分支(如master),执行:
git merge
说明:
两种情况下,Git都会尝试去自动合并改动。但自动合并并非次次都能成功,并可能导致冲突(conflicts)。这时候就需要修改这些文件,手动合并这些冲突(conflicts)。
3.改完之后,需要执行如下命令将它们标记为合并成功:
git add
4.在合并改动之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch>
创建标签
在软件发布时创建标签,是被推荐的。可以执行如下命令以创建一个名为“1.0.0”的标签:
git tag 1.0.0 1b2e1d63ff
“1b2e1d63ff”是要标记的提交ID的前10位字符。使用如下命令获取提交ID:
git log
也可以用该提交ID的少一些的前几位,保持ID唯一即可。
替换本地改动
如果误操作,可以使用如下命令替换掉本地改动:
git checkout –
此命令会使用HEAD中的最新内容替换掉工作目录中的文件。已添加到缓存区的改动,以及新文件,均不受影响。
如果需要丢弃所有的本地改动与提交,可以到服务器上获取最新的版本并将本地主分支指向到它:
git fetch origin
git reset –hard origin/master
TortoiseGit客户端使用
- TortoiseGit客户端生成PPK文件
使用TortoiseGit作为客户端时,下载和提交代码需要PPK文件,主要有如下两种场景:
Git客户端生成了公私钥对,并将该公钥添加到代码仓库的ssh-key配置中
此前未添加互信操作,即没有添加公钥到代码仓库中
Git客户端生成了公私钥对,并将该公钥添加到代码仓库的ssh-key配置中
1.在“开始”菜单,选择“TortoiseGit > PuttyGen”,如图1所示。
图1 PuttyGen
2.单击“Load”按钮,如图2所示。
图2 PuTTY Key Generator
3.选择用户的公私钥目录下的“id_rsa”文件,然后单击“打开”按钮,如图3所示。
图3 选择私钥文件
4.单击“确定”,再选择“Save private key”,如图4所示。
图4 Save private key
5.根据提示单击“是(Y)”确定生成。
6.保存到用户的个人账户公私钥目录下,如图5所示。
图5 PPK文件保存目录
此前未添加互信操作,即没有添加公钥到代码仓库中
1.在“开始”菜单,选择“TortoiseGit > PuttyGen”,如图6所示。
图6 PuttyGen
3.单击“Generate”按钮,在图中红色方框的区域内不停的移动鼠标,即可生成密钥,如图7所示。
图7 PuTTY Key Generator
3.单击“Save private key”按钮,把生成的密钥保存为PPK文件,如图8所示。
图8 Save private key
4.根据提示单击“是(Y)”确定生成。
5.保存到用户的个人账户公私钥目录下,如图9所示。
图9 PPK文件保存目录
-
TortoiseGit客户端创建Git版本库
第一次建立版本库时,在本地任意空的文件夹下右键,选择“Git Creat repository here”。 -
TortoiseGit客户端Clone版本库
1.选中本地Git库文件夹(即创建版本库的文件夹),右键选择“拉取(Pull)”,如图1所示。
图1 拉取(Pull)菜单
2.管理远端,如图2所示。
图2 管理远端
3.配置相应的URL和PPK文件,单击“确定”,如图3所示。
图3 配置URL
-
TortoiseGit客户端Push版本库
1.配置用户名、邮箱和签名密钥(PPK文件)。
2.在空白处右键,选择“TortoiseGit > setting”。
3.选中“Git”节点,如图1所示,填写用户与邮箱地址。
图1 Git User Info
说明:
如果不能Push,请运行如下脚本进行排查,并将生成的“git.log”发给售后支持:
#!/bin/bash
#this script will collect some logs for Coding.net
###how to use ###
#first enter your git reposiztory
#then execute this bash, please make sure you have correct rights
echo “## git version ##################” >> git.log
git version >> git.log
echo “## ping ##########################” >> git.log
ping codehub.devcloud.huaweicloud.com >> git.log
echo “## curl codehub.devcloud.huaweicloud.com ###########” >> git.log
curl -v https://codehub.devcloud.huaweicloud.com >> git.log 2>&1
echo “## ssh -vT git@codehub.devcloud.huaweicloud.com ##############” >> git.log
ssh -vT git@codehub.devcloud.huaweicloud.com >> git.log 2>&1
echo “## git pull ##############” >> git.log
GIT_CURL_VERBOSE=1 GIT_TRACE=1 GIT_TRACE_PACKET=1 git pull >> git.log
Git客户端示例
- Git客户端上传下载代码
1.检查网络。
在浏览器中访问代码仓库地址:telnet codehub.devcloud.huaweicloud.com 22
2.检查客户端和代码托管服务器互信。
如果在pull、push时提示要输入密码,请确定是否已经添加了公钥文件。
添加完成后,判断互信是否添加成功:$ ssh -vT git@codehub.devcloud.huaweicloud.com
如果出现如图1所示信息则表示互信正常。
图1 互信信息
3.如果已添加代码仓库的互信,双方指纹信息有变化,在提交代码时报公钥认证出错,需要做如下操作:
删除“~/.ssh/known_hosts”中codehub.devcloud.huaweicloud.com相关的行。
重试push、pull或ssh -T git@codehub.devcloud.huaweicloud.com。
遇到询问是否信任服务器公钥,输入“yes”即可。
4.代码正常下载,如果页面分支列表做了分支保护,提交的分支会显示在已受保护分支列表中,则向某个分支Push代码会不成功,如图2所示。
图2 Push代码
5.联系仓库管理员解除分支保护,解除保护后,开发人员可以正常提交代码。
- Git客户端设置Windows下的字符编码
背景信息
在Linux及托管网站上默认的字符编码均是“UTF-8”,而Windows系统默认编码不是采用“UTF-8”。如果不设置Git字符编码为“UTF-8”,Git客户端在Windows下中文内容可能会出现乱码。设置字符编码后,可以解决中文显示的问题。
操作步骤
1.设置Git编码为“UTF-8”。
$ git config –global core.quotepath false # 显示status编码
$ git config –global gui.encoding utf-8 # 图形界面编码
$ git config –global i18n.commit.encoding utf-8 # 提交信息编码
$ git config –global i18n.logoutputencoding utf-8 # 输出log编码
$ export LESSCHARSET=utf-8 # 最后一条命令是因为git log默认使用less分页,所以需要bash对less命令进行utf-8
以上命令等效于:
在“etc\gitconfig”中添加:
[core] quotepath = false
[gui] encoding = utf-8
[i18n] commitencoding = utf-8
logoutputencoding = utf-8
在“etc\profile”中添加:
export LESSCHARSET=utf-8
说明:
gui.encoding = utf-8
解决在$ git gui和gitk中的中文乱码。如果发现代码中的注释显示乱码,可以设置项目根目录中“git/config”文件添加:[gui] encoding = utf-8
i18n.commitencoding = utf-8
设置commit log提交时使用“utf-8”编码,可避免服务器上乱码,同时与Unix上的编码提交保持一致。
i18n.logoutputencoding = gbk
保证在$ git log时编码设置为“utf-8”。
export LESSCHARSET=utf-8保证$ git log可以正常显示中文(配合i18n.logoutputencoding设置)。
2.设置ls命令可以显示中文名称。
修改“etc\git-completion.bash”文件:alias ls=“ls –show-control-chars –color”
- Git客户端修改文件名大小写后,如何提交到远端
背景信息
Git修改了文件名大小写后,远端将不识别对应文件。
例如:远端服务器“AppTest.java”,本地重命名后“apptest.java”,提交后远端还是“AppTest.java”。
操作步骤
请按顺序执行如下命令:
git mv –force AppTest.java apptest.java
git add apptest.java
git commit –m “rename”
git push origin XXX(分支)
- Git客户端设置系统的换行符转换
背景信息
由于操作系统不兼容的缘故,在跨平台上查看文本文件会因为换行符不同而造成障碍,使用版本控制系统也同样存在换行符的问题。
操作步骤
1.(可选)默认Git不对core.autocrlf进行配置,请设置如下值来辨别并对文本文件执行换行符转换:
Windows系统
设置配置变量“core.autocrlf”为“true”,相当于在版本库中所有的文本文件都使用“LF”作为换行符,而检出到工作区无论是什么操作系统都使用CRLF作为换行符。
Linux系统
设置配置变量“core.autocrlf”为“input”,相当于在新增入库的文本文件的换行符自动转换为“LF”,如果将文件从版本库检出到工作区则不进行文件转换。
2.通过配置变量core.autocrlf来开启文本文件换行符转换的功能:
git config –global core.autocrlf true
- Git客户端提交中文名文件
背景信息
在Git客户端中,提交文件时,如果文件名是中文,会出现乱码。
操作步骤
避免中文文件名出现乱码的几种提交场景操作方法如表1所示。
表1 中文名文件提交场景
场景 操作方法
在Git客户端中,使用git add添加要提交的文件时,如果文件名是中文,会显示形如“256\346\200\273\347\273\223.png”的乱码。
在bash提示符下输入:
git config –global core.quotepath false
使用git log提交显示中文Log乱码。
1.设置git gui的界面编码:
git config –global gui.encoding utf-8
2.设置commit log提交时使用“utf-8”编码,可避免服务器上乱码,同时与Linux上的提交保持一致:
git config –global i18n.commitencoding utf-8
3.使得在$ git log时将“utf-8”编码转换成“gbk”编码,解决Msys bash中git log乱码:
git config –global i18n.logoutputencoding gbk
4.使得git log可以正常显示中文(配合“i18n.logoutputencoding” = “gbk”),在“/etc/profile”中添加:
export LESSCHARSET=utf-8
在MsysGit自带的bash中,使用ls命令查看中文文件名乱码,cygwin没有该问题。
1.使用ls –show-control-chars命令来强制使用控制台字符编码显示文件名,即可查看中文文件名。
为了方便使用,可以编辑“/etc/git-completion.bash”,新增一行:
alias ls=“ls –show-control-chars”
2.重启Git客户端即可生效。
-
Git客户端提交隐藏文件
请使用git add .。
说明:
不能使用git add ,使用会忽略隐藏文件。
文件和文件夹名称中不能包含特殊字符。 -
Git客户端提交已被更改的文件
背景信息
Git提交代码时,如果文件被修改了,会出现如图1所示信息。
图1 提交代码
操作步骤
1.拉取远端最新代码。
git pull origin XXX(分支)
2.正确修改并提交代码。
git push origin XXX(分支)
Git常用命令
背景信息
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目,能有效高速地处理从很小到非常大的项目版本管理。
通过Git可以从服务器克隆完整的Git仓库(包括代码和版本信息)到单机上,然后根据不同开发目的灵活创建分支、修改代码、提交代码、合并分支等。
常用命令
Git常用命令的功能、格式、参数说明以及使用实例如表1所示。
表1 Git常用命令
命令 功能 格式 参数说明 使用实例
ssh –keygen –t rsa
生成密钥
ssh –keygen –t rsa –C [email]
email:邮箱地址
在C盘.ssh文件夹下获取密钥文件“id_rsa.pub”
ssh –keygen –t rsa –C “devcloud_key01@huawei.com“
git branch
新建分支。
git branch [new branchname]
new branchname:新的分支名
新建分支:
git branch newbranch
git branch –D
删除分支
git branch –D [new branchname]
new branchname:新的分支名
删除本地分支:
git branch –D newbranch
删除服务器仓库分支
git branch –rd origin/newbranch
同步远端已删除的分支
git remote prune origin
git add
添加文件到暂存区。
git add [filename]
filename:文件名
添加一个文件到暂缓区:
git add filename
添加所有修改的和新增的文件到暂缓区:
git add .
git rm
删除本地目录或文件。
git rm [filename]
filename:文件名或目录名
删除文件:
git rm filename
git clone
克隆远程仓库。
git clone [VersionAddress]
VersionAddress:版本库的网址。
克隆jQuery的版本库:
git clone https://github.com/jquery/jquery.git
该命令会在本地主机生成一个目录,与远程主机的版本库同名。
git pull
把远程仓库的分支pull到本地,再与本地的指定分支合并。
git pull [RemoteHostname] [RemoteBranchname]:[LocalBranchname]
取回“origin”主机的“next”分支,与本地的“master”分支合并:
git pull origin next:master
git diff
文件、分支、目录或版本的比较。
git diff
当前与“master”分支的比较:
git diff master
git commit
文件提交。
git commit
添加提交信息:
git commit –m “commit message”
git push
推送文件到远程仓库。
git push [RemoteHostname] [LocalBranchname] [RemoteBranchname]
如果省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建:
git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
git merge
合并分支。
git merge [branch]
branch:分支名
假设当前分支为“develop”,将master主分支之后的最新提交merge到当前的develop分支上:
git merge master
git checkout
切换分支。
git checkout [branchname]
branchname:分支名
切换到master分支:
git checkout master
git log
列出日志信息。
git log
列出所有的log:
git log –-all
git status
查看状态输出。
git status
git status
git grep
查找字符串。
git grep
查找是否有“hello”字符串:
git grep “hello”
git show
显示内容或修改的内容。
git show
git show v1
显示“tag v1”的修改内容
git show HEAD
显示当前版本的修改文件
git show HEAD^
显示前一版本所有的修改文件
git show HEAD~4
显示前4版本的修改文件
git stash
暂存区。
git stash
git stash list
列出暂存区的文件
git stash pop
取出最新的一笔,并移除
git stash apply
取出但不移除
git stash clear
清除暂存区
git ls-files
查看文件。
git ls-files
git ls-files –d
查看已经删除的文件
git ls-files –d |xargs git checkout
将已删除的文件还原
git remote
操作远程。
git remote
git push origin master:newbranch
增加远程仓库的分支
git remote add newbranch
增加远程仓库的分支
git remote show
列出现在远程有多少版本库
git remote rm newbranch
删除远程仓库的新分支
git remote update
更新远程所有版本的分支
Git LFS使用
背景信息
代码托管支持Git LFS(Large File Storage,大文件存储)协议,可以把音乐、图片、视频等指定的任意大文件资源存储在Git仓库之外,对于使用者而言,类似在操作一个完整的Git仓库,非常方便。通过将大文件存储在Git原有的数据结构之中,可以减小Git仓库本身的体积,使克隆Git仓库的速度加快,也使得Git不会因为仓库中充满大文件而损失性能。
使用操作包含以下内容:
安装Git LFS
配置追踪文件
提交大文件
克隆包含Git LFS文件的远程仓库
更多操作
安装Git LFS
不同操作系统的安装方法如表1所示。
表1 Git LFS安装方法
操作系统 安装方法
Windows
安装不低于Git 1.8.5版的Git客户端(下载地址),然后在命令行中执行:
git lfs install
Linux
在命令行中执行:
$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get install git-lfs
$ git lfs install
MacOS
首先安装Homebrew,然后在命令行中执行:
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
$ brew install git-lfs
$ git lfs install
配置追踪文件
配置追踪文件方法如表2所示。
表2 追踪文件配置方法
场景 方法
追踪所有后缀名为“.psd”的文件
追踪所有后缀名为“.psd”的文件:git lfs track “*.psd”
追踪单个文件
追踪单个文件:git lfs track “logo.png”
查看已追踪的文件
查看已追踪的文件,可以通过git lfs track,或通过查看“.gitattributes”文件,获取详情:
$ git lfs track
Listing tracked patterns
*.png (.gitattributes)
*.pptx (.gitattributes)
$ cat .gitattributes
*.png filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
提交大文件
提交代码时需要将“.gitattributes”文件也提交到仓库,提交完成后,执行git lfs ls-files命令可以查看 LFS 跟踪的文件列表。
$ git push origin master
Git LFS: (2 of 2 files)12.58 MB / 12.58 MB
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 548 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To
<SHA_ID1>…<SHA_ID2> master -> master
$ git lfs ls-files
61758d79c4 * <FILE_NAME_1>
a227019fde * <FILE_NAME_2>
克隆包含Git LFS文件的远程仓库
使用git lfs clone命令克隆包含“Git LFS”文件的远程仓库到本地:
$ git lfs clone
Cloning into ‘’
remote: Counting objects: 16,done.
remote: Compressing objects: 100% (12/12),done.
remote: Total 16 (delta 3), reused 9 (delta 1)
Receiving objects: 100% (16/16),done.
Resolving deltas: 100% (3/3),done.
Checking connectively…done.
Git LFS: (4 of 4 files) 0 B / 100 B
Web项目 on 代码托管
目的
通过视频模拟演示代码托管的过程,支撑完成一个JavaWeb项目的交付;帮助想要或者正在使用代码托管服务的用户,将本地Git迁移到云上。
使用DevCloud做版本控制器,管理代码(视频)
使用DevCloud的“代码托管”管理项目代码内容以及版本,请参见在开发过程中使用DevCloud做版本控制器,管理代码(视频 5min)。
Java on DevCloud-3:代码托管:本系列视频主要是通过一个简单的研发场景,讲解DevCloud的各模块功能,操作以及在项目各生命周期中的应用,帮助大家了解Java项目如何在DevCloud上面运行。
1.所有的开发人员安装git bash和git tortoes
2.生成SSH密钥,确保代码传输过程中的安全性
如何生成密钥:
把公钥和私钥都保存到电脑上
以一个开源项目为模板进行
点击fork
下载到本地
需求:把项目名称改一下
Git on DevCloud
请参见Git on DevCloud。https://support.huaweicloud.com/productdesc-devcloud/devcloud_pdtd_00001.html
Docker on DevCloud
请参见Docker on DevCloud。
Code Review实践
请参见如何实践Code Review。
更多Code Review问答实录请参见关于Code Review的真命题和伪命题。
角色权限
公共问题
常见报错解决方法
今天的文章华为软开云2–玩转代码托管分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31491.html