版本回退有多种方式,下面一一演示:
回退到当前版本(放弃所有修改)
放弃某一个文件的修改
回退到某一版本但保存自该版本起的修改
回退到某一版本并且放弃所有的修改
回退远程仓库的版本
先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行:
git push <仓库名> <分支名> -f
如何以当前版本为基础,回退指定个commit
首先,确认你当前的版本需要回退多少个版本,然后计算出你要回退的版本数量,执行如下命令
git reset HEAD~X //X代表你要回退的版本数量,是数字!!!!
需要注意的是,如果你是合并过分支,那么背合并分支带过来的commit并不会被计入回退数量中,而是只计算一个,所以如果需要一次回退多个commit,不建议使用这种方法
如何回退到和远程版本一样
有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的地方,执行的命令如下
git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名
git submodule
我们可能偶尔在一下项目中看到类似下图的东西
这其实是git的子模块功能,作用是为了在项目中引入另一个项目的部分或全部内容,但是这两个项目是分开开发或管理的,这样直接使用git submodule就可以不必要将另一个项目复制一份直接引用即可.
常用 git submodule命令
# 添加git子模块
git submodule add repourl
# 初次clone带有子模块的仓库如果想查看子模块的内容:
git submodule init
git submodule update
或者 git submodule update --init --recursive
# 更新子模块地址
vi .gitmodules #修改url地址
git submodule sync
然后提交更改即可。
# 删除子模块
删除 .gitsubmodule中对应submodule的条目
删除 .Git/config 中对应submodule的条目
git rm --cached {submodule_path} # submodule_path即子模块在仓库下的路径
git commit -m 'xxx'
git push
具体的关于 git submodule的说明以及使用,请点击这里
为什么在push的时候,出现了413错误,push失败
为了提供更稳定更快的服务,我们的http服务器nginx设置了单次上传大小限制为200M,如果您的单次push超过200M,将被服务器拒绝,返回413错误。遇到这种问题,可以在http://git.oschina.net/keys 页面上传SSH公钥,通过SSH通道push即可。
为什么pull request合并不了
pull request无法合并是因为您的pull request 目标分支的提交中存在于您的修改冲突的部分,这时,您需要先在本地将目标分支拉取下来合并到提交pull request的项目的分支,解决冲突后重新推送到提交了pull request的项目的分支,我们后台会自动更新,一旦检测到两个仓库不存在冲突时,便会提示可以自动合并,我们建议,在pull request合并前,应该处于可以自动合并的状态。
如何对一个项目提交Pull Request
Pull Request是两个仓库提交变更的一种方式,通常用于fork项目与被fork项目的差异提交,同时也是一种非常好的团队协作方式,下面,就来讲解如何在码云平台提交Pull Request:PS:码云平台限制 Pull Request 源项目与目标项目需存在fork与被fork关系,故如果你要提交Pull Request,必须先fork一个项目,然后才能对该项目提交 Pull Request,同时,以该项目为父项目的所有项目,您也均可以提交Pull Request。
如何fork项目
fork项目时非常简单的,进到项目页面,然后找到右上角的fork按钮,点击后再次点击确定,等待系统在后台完成仓库克隆操作,你就完成了fork操作,如图:
如何提交Pull Request:
首先,您的项目与目标项目必须存在差异,这样才能提交,比如这样:如果不存在差异,或者目标分支比你提Pull Request的分支还要新,则会得到这样的提示:
然后,填入Pull Request的说明,点击提交Pull Request,就可以提交一个Pull Request了,就想下图所示的那样:
如何对已经存在的Pull Request的进行管理
首先,对于一个已经存在的Pull Request,如果只是观察者,报告者等权限,那么访问将会受到限制,具体权限限制请参考码云平台关于角色权限的内容,下文涉及的部分,仅针对管理员权限,如果您发现不太一样的地方,请检查您的权限是不是管理员或该Pull Request的创建者。
如何修改一个已经存在的Pull Request
点击Pull Request的详情界面右上角的编辑按钮,就会弹出编辑框,在编辑框中修改你需要修改的信息,然后点击保存即可修改该 Pull Request,如下图所示:请注意,在该界面,可以对Pull Request进行指派负责人,指派测试者等等操作,每一个操作均会通知对应的人员
对Pull Request的bug修改如何提交到该 Pull Request中
对于Pull Request中的bug修复或者任何更新动作,均不必要提交新的Pull Request,仅仅只需要推送到您提交 Pull Request的分支上,稍后我们后台会自动更新这些提交,将其加入到这个 Pull Request中去
Pull Request不能自动合并该如何处理
在提交完Pull Request的后,在这个Pull Request处理期间,由原本的能自动合并变成不能自动合并,这是一件非常正常的事情,那么,这时,我们有两种选择,一种,继续合并到目标,然后手动处理冲突部分,另一种则是先处理冲突,使得该Pull Request处于可以自动合并状态,然后采用自动合并,一般来讲,我们官方推荐第二种,即先处理冲突,然后再合并。具体操作为:先在本地切换到提交Pull Request的分支,然后拉取目标分支到本地,这时,会发生冲突,参考如何处理代码冲突 这一小节将冲突处理完毕,然后提交到Pull Request所在的分支,等待系统后台完成Pull Request的更新后,Pull Request就变成了可自动合并状态
Pull Request不小心合并了,可否回退
对于错误合并的Pull Request,我们提供了回退功能,该功能会产生一个回退 XXX 的Pull Request,接受该Pull Request即可完成回退动作,注意,回退本质上是提交一个完全相反的Pull Request,所以,你仍然需要进行测试来保证完整性,另,为了不破坏其他Pull Request,建议只有需回退的Pull Request处于最后一次合并操作且往上再无提交时执行回退动作,否则请手动处理。
git clone git@osc项目出错 server aborted the ssl handshake
这是您的网络连接有点问题,建议您更换http地址或者ssh地址或者过一会再试。
用户账户
个性地址
1. 什么是个性地址??
个性地址即您在码云平台的用户path,是您在码云平台的唯一身份标识,同时也是您在码云平台创建项目时项目所在的空间的地址,该地址类似于二级域名,每一个用户有且只能有一个个性地址。
例如某项目地址为: https://git.oschina.net/xxx/test.git, xxx即你的个性地址
注册的时候请选择自己想要的个性地址username,因为目前还不允许用户自己修改个性地址。
2.为什么无法修改个性地址?
个性后缀会作为您项目地址的一部分,这个地址是要配置在您的本地仓库中的,如果修改个性后缀,您的本地项目地址也会更改,而且所有使用这个项目的人的本地项目地址都要更改,非常不便。因为这样的原因,我们不提供自助修改个性后缀的功能,请您在注册的时候谨慎填写。
为什么我收不到激活/通知/重置密码等邮件
本站采用SendCloud服务发送邮件,我们尽力保证邮件快速送达,但是发送邮件仍然可能会有延迟,正常情况下都可以在10分钟内收到邮件,如果你没有收到邮件,可查看是否被识别为垃圾邮件,如果垃圾邮件中仍然没有,可通过建议,或者在开源中国社区上告知我们。另,部分企业邮箱存在反垃圾邮件服务,如您的企业配置了反垃圾邮件服务或者使用了如阿里云之类的企业邮,请确保将@git.oschina.net的域名设置成白名单,否则无法接收激活邮件,另外由于众所周知的原因,某些海外邮箱无法接收我们发出的邮件,遇上这种情况,请通过建议或者加入QQ群:515965326 然后联系群管理员。
【注】:
因为特殊原因,如果您使用的是新浪邮箱,暂时是无法收到激活/通知/重置密码等邮件。不过,我们工作人员正在尽快处理该问题,敬请谅解!
怎么更改邮箱
怎么修改账户邮箱??
如果你的账号已经激活,请到个人中心修改邮箱,地址为:修改账户
如果未激活,请发邮件到 git#git.oschina.cn申请或者联系码云管理员,在您提供必要的证明信息后,管理员可以协助您修改注册邮箱。
为什么我的网络连接不上码云?
码云为了扛住各种攻击,保证服务正常可用,在真实IP前面加了一层高防防护(电信联通单线高防),正是因为加了这层高防防护,因为高仿的链路质量不是特别好,所以会出现有些用户连不上码云的情况,主要有下面几种情况
- 打不开https链接
- Git客户端操作码云链接各种超时 Timeout
- Ping 不通
- 用https操作出现
can not connect to git.oschina.net:443 No Error
可以通过映射host到120.55.226.24
来解决这个问题,这是BGP高防的IP
有些用户可能会问为什么我们不把域名直接解析到120.55.226.24
,这是因为BGP线路的防护流量比较小,如果超过防护上限,那么就会进入黑洞,所有用户都会受影响,而单线高防可防御流量上百G,所以为了大家的正常使用才这么考虑,目前我们也正在找寻更可靠的防护方案,不论是从防护上还是链路质量上,谢谢大家的支持和理解!
为什么我突然无发访问/登录码云
从2015年6月以来,码云平台一直在遭受攻击,所以码云平台为了提供正常的服务,使用了第三方的防护方案,如高防ip等防护手段,所以,如果您发现您无法登录或访问码云,请检查:- 能否打开网页- 能否登录- 能否推送或拉取
以上故障出现的可能情况为:- 1.码云平台更换了ip地址- 2.码云平台遭受了攻击导致无法访问- 3.码云平台封锁了您的账号密码- 4.您的dns存在dns解析劫持- 5.码云平台正在维护(一般是周末凌晨)- 6.您的ip地址被第三方防护识别为恶意用户而封禁- 7.您的ip地址过于频繁访问码云平台导致ip地址被封禁- 8.您的项目因为违反码云平台使用条款而屏蔽- 9.您的账号因为散播不合法信息而遭到封禁- 10.您的账号或项目因为上级主管政府部门要求而封禁
以上故障的的解决办法为:- 遇上问题1,4的解决办法为清理自己的dns缓存然后重新解析码云平台的ip地址- 遇上问题2,5的解决办法为等待一阵时间,码云平台处理完攻击或完成维护后重新开放即可- 遇上问题3,8,9的解决办法为主动删除所有不合法信息后重新联系码云的管理员,当账号无法登录时可通过开源中国社区联系码云管理员代为处理- 遇上问题10的解决办法为没有解决办法,请更换邮箱后重新注册- 遇上问题6,7的解决办法为联系码云管理员为您解封ip地址。一般情况下2小时内可以解决,但如封禁为第三方安全防护封禁,则时间需要得久一点
QQ登录的如何修改密码?
QQ登录的会绑定一个邮箱,通过邮箱修改密码!
代码仓库
为什么大文件推不上去
对于普通用户码云单个仓库限制为1G,单个文件限制100M。如果超过限制,您的代码将无法推送,我们提供的只是代码托管平台,不是网盘,二进制文件请勿存放在码云,我们会不定期执行仓库大小扫描,如果发现你您的仓库超过大小超过1G,我们会联系您处理,如果您15个工作日内没有处理,我们将暂停您的仓库的访问,请注意,我们只是暂停您仓库的访问,并不是删除您的仓库,如果您超过半年没有处理,我们将永久屏蔽该仓库的访问.
如果用户仓库提交超过 1GB,请在本地减小仓库体积后清空远程仓库,重新推送到远程服务器即可.这一策略适用与大文件.
企业用户能够支持更大体积的仓库。
配置SSH公钥
Windows下由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法
很多情况下,Windows平台由于不原生支持ssh,只能使用如git bash openssh,putty等等工具或连接了不同的平台比如同时连接了码云和github等等会因为密钥文件储存位置不一致或者各个工具生成了自己的密钥而导致在连接码云的时候出现Permission denied (publickey),当遇上这种问题是一般有两种解决办法,一种是只使用一种工具,这样就能保证密钥位置不会变动,然后在密钥的文件夹下创建config文件,然后填写如下内容:
Host git.oschina.net
HostName git.oschina.net
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
注意:以上参数中id_rsa这一栏请填写绝对地址,并且这一栏指定的私钥文件名字不一定要是id_rsa,也可以是别的文件名,这样就能保证使用ssh连接码云时使用的是指定的密钥而不会被干扰,但请注意,使用这种方法是请保证该密钥不会被覆盖
另一种方法是只使用一个密钥,所有平台均使用同一个密钥,这样就不会出现密钥不匹配的情况。
为什么我添加了公钥后仍然无法推送代码
添加了公钥后仍然无法推送代码原因有一下几点:- 您本身无权限推送代码- 您电脑上使用的私钥与您添加的公钥不匹配- 您添加的是部署公钥不是用户公钥
需要说明的是:公私钥不匹配是很常见的问题,特别是windows下,遇上公钥不匹配的问题,请重新添加匹配的公钥。
部署公钥仅仅提供拉取代码的权限,不提供推送代码的权限,故如果是您添加成部署公钥而导致无法推送,请删除该部署公钥后重新添加到个人中心的公钥中。
代码质量管理
我该如何开启代码质量分析
目前码云平台自行搭建了sonar代码质量分析平台以及腾讯优测安卓源码分析平台,其中,sonar支持代码级别的分析,可以对每一行代码进行分析,腾讯优测平台则可以对安卓项目在各个平台运行的效果进行具体测试,以便于适配各种型号的设备。
sonar代码质量分析
在质量分析页面选择sonar,如图:然后点击分析此项目的代码,在弹出来的对话框中填写相应的参数,如图:
请注意:参数不要填写错误,不然无法正确分析。当你看到如下图所示时,则证明分析任务已经加入后台队列,你可以去喝杯咖啡或者下午茶,然后回来查看结果
需要说明的是,分析结果以内嵌网页的形式嵌入码云平台,故如果觉得码云平台页面布局不太符合您的要求,您可以自行通过查看网页源码提取出页面地址然后自行打开查看
腾讯优测
腾讯优测的开启方法和sonar是一样的,故开启方法请参开sonar在提交腾讯优测大约3分钟到半小时后,您的项目分析结果便会已报告的形式呈现给您,报告中会详细的列出您的应用可能遇上的问题,是什么机型,如图:
您可以点击具体的项目查看具体的问题,以便于您定位您的问题。需要说明的是,优测仅仅支持安卓平台的项目,并不支持iOS或者其他平台,请勿测试其他平台的应用。
Webhook
我该如何利用webhook搭建自动化部署/测试平台
码云平台提供了webhook触发钩子,定义了5种触发方法,我们可以根据webhook的回调来搭建自动化部署/测试平台,下面给出示例(注:以下给出的是伪代码,并不能实际运行,仅作参考):首先,我们明确自己的需求:搭建一个自动化部署平台,其需求如下:- 能做到自动拉取代码- 自动编译- 自动更新数据库表结构- 只更新master分支
这是一个最简单的自动化部署平台需求,下面就来看看怎么实现,需要说明的是,因为是最简单的方案,故没有考虑分布式的架构。
我们来做功能拆分,拆分如下:
代码同步模块:
- 正常代码拉取
- 强制推送代码拉取
- 忽略其他分支的代码推送
编译模块
- 正常编译
- 异常编译回滚
部署模块
- 编译文件自动部署
- 重启服务端
- 重启代理工具
日志模块:
- 正常情况下日志输出
- 代码拉取失败日志输出
- 编译错误日志输出
- 服务端重启日志输出
现在功能需求定好了,开始进行代码编写,因为这是一个最简单的部署,所以数据量非常小,用文本文件足以,故这里不采用数据来增加系统复杂程度
首先,我们我们要写一个接口,以便于接收由webhook发出的数据,由于webhook的数据发送方式是post,故需要一个接收post数据的地址。例如:http://xxx.xxx.com/xxx/xxx/git/post.php 这样一个地址,当然,这个php文件具体怎么写就不知道了哈,他的作用只有一条:调用执行预定脚本: auto.sh并将收到的参数传递给脚本然后我们剩下的工作就是写auto.sh这个脚本了,我们所有的工作都需要在auto.sh这个脚本上完成。首先,我们来搞定自动拉取代码
git pull origin master
这是正常拉取代码的,但是这条命令需要拉取的分支不存在强制推送状态,故这条命令适用性不够广泛,所以我们要改造一下,改成下面的样子:
git reset --hard <commit id>
git pull origin master
puts “时间 拉取代码成功,分支为master” >> "pull.txt"
然后我们就搞定了代码拉取的问题,设定好commit id 任你分支怎么变化怎么强推我都能正常拉取代码。为了正常判断状态,我们将这段代码新建个脚本,命名为 pull_code.sh 然后交给auto.sh调用,这样我们就可以在auto中写上判断条件来判断脚本执行成功还是失败,这样便于日志输出
实际上,这里只做到啦拉取master分支的代码,我们可以将这段代码改改,将分支名作为参数,然后加上checkout语句,就可以拉取任意分支了,比如这样:
git checkout 分支名(参数,外部传递)
git reset --hard <commit id>
git pull origin 分支名
至于commit id 从配置文件中读出来就行了,然后就变成了可以部署其他分支的代码了。到这里,拉取代码的部分就算完成了。
接下来是自动编译部分,同样,基于扩展性需求,我们可以将它做成一个脚本,已编译rails应用为例,我们一般需要编译资源执行如下命令:
bundle exec rake assets:precompile RAILS_ENV=production
所以我们将这条命令写成脚本,命名为:compile.sh 同样,编译部分就完成了,其他语言按照其他语言格式将执行的命令写入到脚本中去,然后等待auto.sh的调用即可
部署模块同样的操作手法,将需要执行的命令一条一条写入脚本中,等待被调用
然后我们开始写最重要主文件,也就是auto.sh脚本(注:以下是伪代码,不具有执行能力,仅提供思路参考)
以下是伪代码:开始接受参数:params
解析参数,需要:分支信息 commit信息
根据分支信息和commit信息判断是否需要更新,如果无需更新,结束
需要更新,开始切换用户,获取更新权限,写入参数到文本文件中,避免因切换参数导致参数丢失
从文本文件中读取参数,调用pull_code.sh脚本,同时传递分支参数
接收pull_code.sh脚本执行结果,开始根据执行结果打印日志,同时保存执行结果到变量code
根据变量code的值判断代码拉取是否成功,判断是否需要编译资源,同时打印日志
调用部署脚本,开始执行部署操作
日志部分开始工作,对每次执行结果进行记录
汇总日志部分,开始分析是否可以重新启动服务(热启动或其他)
开始清理除日志之外的中间文件,清理工作目录
执行完成
以上就是一个最简单的利用webhook进行自动化部署的案例,其原理是先用钩子触发回调,拿到更新信息,然后调用预先定义好的自动化部署脚本进行部署,最后完成操作
SVN 支持
我该如何使用SVN管理我的项目
现在 码云 目前支持使用 Subversion 对仓库进行操作,以下是使用指南和注意事项。