同步和提交AOKP源码


===注意事项===
以下操作无法在Windows平台下执行。
注册用的邮箱建议使用Gmail,其他邮箱未测试。
请先用SMARTHOSTS替换Linux系统原有的HOSTS。
请先安装git工具。

===术语定义===
目录:就是文件夹。
提交(commit):应理解为一个名词,将单个或多个操作的行为看做一个对象,这个对象就叫做提交。
github:一种代码托管服务器。
gerrit:一种代码评审机制。
分支(branch):同步到本地的源码是主干,代码的修改不应在主干上直接修改,而是新建一个分支进行修改,修改后评审过没有问题之后才会合并到主干。在AOKP这个项目中,作为普通开发者要做的是“新建分支>修改代码>提交操作”,评审和合并的操作由AOKP开发组来决定。

*********同步AOKP源码*********mkdir ~/bin
//创建名为bin的目录
PATH=~/bin:$PATH
//将bin文件夹添加到PATH环境变量
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
//将repo脚本安装到bin/repo目录下
chmod a+x ~/bin/repo
//修改权限
mkdir ~/aokp
//创建名为aokp的目录,源码将同步到这个目录里
cd ~/aokp
//进入aokp目录
repo init -u git://github.com/AOKP/platform_manifest.git -b ics
//初始化git代码库,-b ics表示ics分支。
repo sync -jX
//开始同步,将代码库同步到本地,X表示你的CPU核心数。直接repo sync不加参数也可以。复制代码同步时间需要很久很久很久很久很久很久很久很久很久很久很久很久。。。。。。。。。。。。。。。。。
而且会出现各种错误。。。要有心理准备。。。。


*********提交代码*********
===注册账户===
打开 https://github.com/AOKP
点击顶上的Signup and Pricing
点击第一行Free for open source右边的Create a free account
记住自己用户名username和注册的邮箱email,待会要用。
//这里注册的账户是github的,并不专属于AOKP
//github可以理解为是一个项目托管的服务器,AOKP这个项目的各种代码存在这个服务器上,它只是这个服务器上无数个项目中之一。

打开 http://www.gerrit.aokp.co
点右上角register
点击Register with a Google Account
授权谷歌账户。
//这是在aokp的代码评审服务器上注册,这是AOKP用于审核开发者提交的各种代码的服务器。
//Open显示的是来自世界各地的开发者的提交,这些提交尚未被采用,待评审。
//Merged表示已合并到代码主干中的提交,也就是通过评审正式加入到AOKP代码中。

===配置git用户名===
打开终端,输入命令,不含[]git config --global review.gerrit.aokp.co.username [用户名]
git config --global review.gerrit.aokp.co.email [注册邮箱]复制代码===验证配置===
打开终端,输入命令ls ~/.ssh/复制代码检查是否有id_rsa和id_rsa.pub
如果有,表示配置完成,可以开始“修改代码并提交”的操作。

如果没有,输入命令,不含[]ssh-keygen -t rsa -C [邮箱]
cat ~/.ssh/id_rsa.pub复制代码复制所有出现的内容

登陆Gerrit > 右上角的Settings > 左边列表里的SSH Public Keys
点击右边的Add Key
把刚才复制的内容贴进去,点下面的Add key按钮。

打开 http://gerrit.sudoservers.com/#/q/status:merged,n,z
点右上角Sign In
点击Sign in with a Google Account
登陆后点击右上角settings
点击右边SSH Public Keys
点击Add Key ...
把刚才复制的内容贴进去,点下面的Add按钮。
//这一步是添加SSH密钥,它包含你的注册信息,在与Gerrit服务器交互时让服务器可以识别你的身份。

===修改代码并提交===
在进行任何操作前,必须先重新同步一遍源码,确保本地源码最新,防止造成分支错乱。
以下部分操作在熟悉命令含义后可省略,此处是以最安全最保守的步骤来做的。

此处以添加ROMControl翻译为例
进入源码所在目录后,输入命令repo start translations packages/apps/ROMControl
//它的含义是为packages/apps/ROMControl展开一个名为translations的分支,若无此分支则会自动新建,若有此分支则进入此分支。复制代码然后输入命令,进入ROMControl的目录cd packages/apps/ROMControl复制代码输入命令git branch
//这是用来查看当前所在分支,上一句如果执行正确的话,当前分支应该在translations(绿色表示)
git status
//这是用来查看当前状态,因为还没做任何修改,所以应该显示没有代码被修改。复制代码接下来,可以对代码进行修改。

修改完成后,输入命令git status
//显示当前状态,修改过的文件应该显示为红色
git diff
//显示修改的具体内容与原版的区别,按q可退出
git status
//再次显示当前状态,确认一遍修改过的文件,显示为红色
repo start translations .
//再次在当前目录下确认分支,不要漏掉最后的点
git status
//再次显示状态,确认修改过的文件,文字红色复制代码这时候如果有错还来得及改。。。
确认完全没问题之后,输入命令git add -A
//添加所有的修改,包括文件内容修改、文件及目录的增删
git status
//再次显示状态,修改过的文件此时应为绿色
git commit -s
//准备提交,将光标移动到最顶部,写上本次提交的说明,不能用#,其它的部分千万不要动。
//比如本次修改更新了一些翻译,提交说明就写上Update Simplified Chinese translations
//按ctrl+o是保存,按过之后提示保存的文件名,不用改它,直接回车
//再按ctrl+x退出
git log
//显示日志,此时为本地日志,按q退出,这个看不看无所谓。
repo upload .
//上传提交到服务器,最后的点不要漏掉复制代码===修正提交===
如果发现已经提交到服务器的代码需要修改,可按下列步骤操作。
这仅适用于尚未合并的提交,也就是在gerrit的Open里能看到的提交才能修正。
如果提交已经合并到主干,你只能重新执行一个新的提交,而不是这一节所说的修正提交。

打开 http://gerrit.sudoservers.com/#/q/status:open,n,z
打开需修改的提交,记住Change-Id

然后在本机对代码进行修改

修改完确认无误之后输入命令git status
//显示修改过的文件,文字红色
git add -A
//添加所有的修改,包括文件内容修改、文件及目录的增删
git status
//再次显示修改过的文件,文字应为绿色
git commit --amend
//修正提交,核对Change-Id与刚才记住的是否一致
repo upload .
//上传到服务器,最后的点不要漏掉复制代码*********其他操作*********
删除一个分支,不含[]git branch -D [分支名]
//删除的分支不能是当前分支,你可以先repo start一个新的分支,然后再删除错误的分支复制代码如果在git commit之后发现错了,不想上传到服务器git reset --hard HEAD^
//这是重置上一次提交,相当于删除,但对于git来说不是删除,而是将提交变成了悬空对象(dangling commit),并且在reflog仍有记录,提交依然可以找回。
git fsck --lost-found
//这是找回删除的提交,可以看到已删除的提交ID,如果你不想找回提交,不要执行这一句
git reflog expire --expire-unreachable=0 --all
//这是清空reflog
git gc --prune=0
//这是清空悬空对象(dangling objects)
git fsck --lost-found
//这时再执行这一句,已找不到任何提交。复制代码

你可能感兴趣的:(git,服务器,upload,Google,ssh,branch)