快速开始
快速进入iCode
登录百度智能云并实名认证,根据提示完成服务开通。
设置代码clone密码
代码库采用https协议上传和下载代码,平台依据百度智能云用户的信息(用户名、公司、邮箱信息)生成一个下载代码使用的用户名,在icode右上角个人设置页中设置密码用户上传和下载代码,设置方法如下图:
准备代码的开发环境
安装Git客户端
登录你的开发环境,首先确认是否已经安装git客户端。若尚未安装请参考下述方法
环境 | 安装方法 |
---|---|
Windows | https://git-for-windows.github.io/,装Git送Cygwin,在开始菜单中找git bash运行 |
Mac | http://brew.sh/,先装包管理工具Homebrew,再用brew install git |
Linux | 一般的发行版都自带Git,如果没有可尝试使用系统的包管理工具安装或使用源码安装 |
Windows下安装
step1. 下载安装包
step2. 按照向导提示选择您心仪的位置安装,直到下图中“finish”安装完成
step3. 配置环境变量
step4【可选】. 安装git credential helper,帮助你保存http/https密码,每次访问代码库无需重复输入用户名和密码(适用于win7/8)
- 下载git-credential-winstore安装包
- 打开Git Bash shell,进入1中安装包所在目录,执行如下命令,成功更新了全局的配置文件 $ ./git-credential-winstore -i /bin/git
Mac下安装
Mac可能默认已经安装了Git,打开终端执行,若得到类似如下信息,则表示Git已安装
$ git –version
git version 2.3.2
step1. 下载安装包
step2. 双击PKG安装包,根据向导完成安装,执行如下命令能正确返回,表明git安装成功
$ git –version
git version 2.3.2
step3【可选】.安装git credential osxkeychain helper,帮助你保存http/https密码,每次访问代码库无需重复输入用户名和密码
-
首先可执行下面的命令测试是否已安装helper,若已安装,则跳过2
$ git credential-osxkeychain usage: git credential-osxkeychain <get|store|erase>
- 下载git-credential-osxkeychain安装包,并将其移到/usr/local/bin目录下……
命令:
$ curl -O http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain
$ sudo mv git-credential-osxkeychain /usr/local/bin/
$ chmod u+x /usr/local/bin/git-credential-osxkeychain
$ git config --global credential.helper osxkeychain
Linux下安装
在Fedora上用yum安装:$ yum install git-core
;在Ubuntu这类Debian系统上用apt-get安装:$ apt-get install git
,可参考官方帮助
也可以使用源码安装,步骤:
step1. 下载安装包
step2. 解压并安装
$ tar zxvf git-2.7.2.tar.gz
$ cd git-2.7.2
$ ./configure --prefix=/some/dir
$ make && make install
step3. 编辑~/.bash_profile,将git加入环境变量
图形化客户端
gitk(git安装包自带,使用说明参考:https://lostechies.com/joshuaflanagan/2010/09/03/use-gitk-to-understand-git/)
tortoise-git(https://tortoisegit.org/)
Atlassian SourceTree(https://www.atlassian.com/software/sourcetree)
配置
基本(必选)
这两个配置会出现在你每次提交代码的日志里,建议使用明确的用户名和邮件~
git config --global user.name xxx git config --global user.email xxxx@baidu.com
高级(可选)
1)按tab自动补全命令,2)在命令行显示当前分支
curl -o .git-completion.bash -s https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o ~/.bash_git_ps1.sh -s https://raw.githubusercontent.com/xtrementl/dev-bash-git-ps1/master/bash_git_ps1.sh
cat >> ~/.bashrc << _EOF_
test -f ~/.git-completion.bash && source ~/.git-completion.bash
test -f ~/.bash_git_ps1.sh && source ~/.bash_git_ps1.sh
_EOF_
source ~/.bashrc
增加一个命令别名gpush,iCode发评审命令
bash -s << '_EOF_'
git config --global alias.gpush '!f() { : push ; r=$1; [[ -z $r ]] && r=origin; b=$2; t=$(awk "{ print \$2 }" $(git rev-parse --git-dir)/HEAD); t=${t#refs/heads/}; [[ -z $b ]] && b=$t; cmd="git push $r HEAD:refs/for/$b%topic=$t"; echo $cmd; echo; $cmd; }; f'
_EOF_
开启百度效率云-DevOps-iCode之旅
创建/删除代码库
小贴士:想要将代码托管到iCode,第一步要创建一个代码库,可以理解为在百度效率云-DevOps-iCode的服务器上申请了一个专门的空间用来存储自己的代码。git代码库是代码托管的唯一单元,是管理代码权限的最小单元,是在ipipe上编译和发布的唯一单元,与svn时代的“模块”概念对等。故要将你的代码代码托管到iCode,首先要创建代码库。
创建
代码库有“公开”和“保密”之分,“公开”指对公司内部成员公开,具备只读代码和发起评审的权限;“保密”则除非特别授予权限(管理员/可写/可读,三选一),否则对此代码库无任何权限
代码库命名规范要求必须是三级,规则如下:
- 企业名【不能修改】在百度效率云-DevOps开通服务的时候指定。例如自动生成:dasdaaaaa
- 目录名【不能修改】目录下可以包含多个代码库,是在创建项目的时候与项目唯一标识关联的。例如:icode
- 代码库名【自定义】是代码库的最后一级,依据自己开发的模块功能取名。例如:portal
如下图创建代码库,代码库名(第三级)、保密类型后,<新建>即可
删除
我创建了一个测试用的代码库想删除怎么办?代码库的管理员(代码库的创建人是代码库的第一个管理员)可以自助删除此代码库
注意:代码库一经删除不能恢复,请慎重。
下载和提交代码
克隆一个代码库到开发环境
小贴士:远程仓库是裸库,且百度效率云-DevOps-iCode目前尚不支持在线修改代码,因此开发者在开发之前,都需要将远程仓库克隆到自己的开发环境中。百度效率云-DevOps-iCode暂时仅提供https一种协议。
第一步,获取代码库的克隆命令
以仓库Baidu/demo为例,进入Baidu/demo仓库主页,可获取仓库的下载命令(如下图),复制命令到任意已安装Git客户端的环境中执行即可。
第二步:在开发环境的一个干净的目录下执行克隆命令
克隆到开发环境中的Baidu/demo库中仅有一个版本管理的目录“.git”和一个编译配置文件“ci.yml”
$ cd /somedir
$ git clone https://[用户名]@xly.bce.baidu.com/git/xxx/Baidu/demo
Cloning into demo...
remote: Total 21 (delta 0), reused 21 (delta 0)
Unpacking objects: 100% (21/21), done.
$ cd demo/
$ ls
提交代码
小贴士:如果你是Git的忠实用户,可以跳过此小节~ Git作为当下最流行的分布式代码管理工具之一,俗话说“鱼与熊掌不可兼得”,强大的Git客户端提供超多功能,同时也有一定的学习成本。如果你第一次接触Git,小编建议你先从网上查查资料自学下Git的设计原理和基本用法。
Git代码库有三个存储区
- Working Directory(工作区),.git目录外这个小文件系统
- Staging Area(暂存区),在.git里面,但还未入库
- Repository(历史区),在.git里面,commit成功后进到这里
下图描述了三个存储区状态的演变顺序
下图描述了文件在各个区域间转换的命令
示例1:修改Baidu/demo仓库中已有的Hello.cpp文件
$ cd demo/
注:打开Hello.cpp文件,修改
$ vim Hello.cpp
$ git status
# On branch master
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Hello.cpp
#
no changes added to commit (use "git add" and/or "git commit -a")
注:将修改的内容添加到Git代码库的暂存区
$ git add Hello.cpp
注:将修改的内容提交到本地的代码库
$ git commit -m "modify file:Hello.cpp"
[master 40d40c1] demo
1 files changed, 1 insertions(+), 0 deletions(-)</file></file>
示例2:增加一个新的文件Hello.h到仓库
$ cd demo/
注:打开Hello.h文件,编写代码
$ vim Hello.h
$ git status
# On branch master
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# Hello.h
注:将修改的内容添加到Git代码库的暂存区
$ git add Hello.h
$ git status
# On branch master
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: Hello.h
#
注:将修改的内容提交到本地的代码库
$ git commit -m "add new file:Hello.h"
[master ef64838] demo
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 Hello.h</file></file>
示例3:删除仓库中的Hello.h文件
$ cd demo/
注:删除Hello.h
$ git rm Hello.h
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: Hello.h
#
注:将修改的内容提交到本地的代码库
$ git commit -m "delete file:Hello.h"
[master a1d5636] demo
0 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 Hello.h</file>
示例4:查看已修改的代码diff
$ cd demo/
注:在一个干净的没有任何修改的代码库中查看当前的状态
$ git status
# On branch master
#
nothing to commit (working directory clean)
注:查看diff无返回
$ git diff
注:此时打开Hello.cpp文件,增加一行代码
$ git diff
diff --git a/Hello.cpp b/Hello.cpp
index 72e8442..ae05cbd 100644
--- a/Hello.cpp
+++ b/Hello.cpp
@@ -4,5 +4,6 @@
int main()
{
printf("Hello World!\n");
+ printf("Hello 百度效率云-iCode!\n");
return 0;
}
$ git add Hello.cpp
$ git diff
$ git diff --cached
diff --git a/Hello.cpp b/Hello.cpp
index 72e8442..ae05cbd 100644
--- a/Hello.cpp
+++ b/Hello.cpp
@@ -4,5 +4,6 @@
int main()
{
printf("Hello World!\n");
+ printf("Hello 百度效率云-iCode!\n");
return 0;
}
$ git commit -m "test for git diff"
$ git diff
$ git diff --cached
$ git diff HEAD^
diff --git a/Hello.cpp b/Hello.cpp
index 72e8442..ae05cbd 100644
--- a/Hello.cpp
+++ b/Hello.cpp
@@ -4,5 +4,6 @@
int main()
{
printf("Hello World!\n");
+ printf("Hello Hello 百度效率云-iCode!\n");
return 0;
}
一些常用的Git操作指令
操作 | 命令 | 操作 | 命令 |
---|---|---|---|
新建一个代码库 | git init –bare/git init | 查看分支 | git branch [-av] |
克隆 | git clone [repourl] | 切换分支 | git checkout [branchname] |
将修改的文件添加到暂存区 | git add [filename] | 创建新分支 | git branch [newbranch] [basebranch]/git checkout -b [newbranch] [basebranch] |
将暂存区中的文件提交到历史区 | git commit -m “some messages”/git commit –amend | 删除分支 | git branch -d [branchname]/git branch -D [branchname] |
查看状态 | git status/git diff | 合并分支 | git merge/git rebase |
查看diff | git diff –cached/git diff HEAD | 回滚代码 | git checkout filename/git reset –hard/–soft |
查看日志 | git log | 标记tag | git tag |
查看、添加/删除远程仓库 | git remote -v/git remote add/rm [remotename] | 查看文件内容 | git show |
从远程仓库更新代码 | git pull/git fetch | 文件删除、改名 | git rm [filename]/git mv [filename] |
写一段代码推送到远程仓库
小贴士:当你想和团队的其他成员分享某个本地分支的代码时,你就需要把你的代码先推送到远程仓库中。也就是说,你创建的本地分支并不会因为你执行了git commit(可以理解为提交到本地的仓库中)就自动同步到远端仓库了。只推动那些协同工作要用到的特性分支。
$ git push [远程仓库名] [本地分支名]:[远程分支名]
举例:修改Baidu/demo库中的Hello.cpp文件,并推送到远程仓库(origin)的master分支
$ cd demo/
$ git remote -v
origin https://[用户名]:@xly.bce.baidu.com/git/xxx/Baidu/demo (fetch)
origin https://[用户名]:@xly.bce.baidu.com/git/xxx/Baidu/demo (push)
$ vim Hello.cpp
$ git add Hello.cpp
$ git commit -m "first commit"
$ git push origin HEAD:master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 394 bytes | 394.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: Processing changes: refs: 1, done
To https://xly.bce.baidu.com/git/xxx/Baidu/demo
390d5bc..894b849 HEAD -> master
将来自github等其他Git平台上的代码托管到百度效率云-DevOps-iCode
step1. 在百度效率云-DevOps-iCode上新建一个代码库(参考新建代码库所述方法),例如:Baidu/Hello-World
step2. 将源代码克隆到开发环境中,添加iCode新代码库的地址且命名为icode,并将master分支的代码推送到远程仓库
$ mkdir src/
$ cd src/
$ git clone https://github.com/bj-yinyan/Hello-World.git --bare
Cloning into 'Hello-World'...
remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Unpacking objects: 100% (13/13), done.
Checking connectivity... done.
$ cd Hello-World
$ git remote set-url origin https://[用户名]@xly.bce.baidu.com/git/xxx/Baidu/Hello-World
$ git remote -v
origin https://[用户名]@xly.bce.baidu.com/git/xxx/Baidu/Hello-World (fetch)
origin https://[用户名]@xly.bce.baidu.com/git/xxx/Baidu/Hello-World (push)
$ git push origin --all
$ git push origin --tags
在线浏览
浏览远程仓库存储的代码
小贴士:这就是传说中的git web哟,使代码浏览变得轻松简单~
在代码库的首页可以浏览远程仓库中不同分支的末端代码,如下图:
查看任意版本的代码,从提交历史入口,见下一段。
查看远程仓库的提交历史
更新远程仓库中最新的代码到开发环境
小贴士:在团队协作开发过程中,我们总是需要将其他成员推送到远程仓库的代码拉到本地的开发环境中,以便实现联调等工作。
方法一:git pull <=> git fetch + git merge
将远程仓库对应分支的代码拉到本地,并合并到本地分支中
举例:
$ cd demo/
$ git pull
From https://xly.bce.baidu.com/git/xxxxx/Baidu/demo
8ffa7a0..3a918ac master -> origin/master
方法二:git pull –rebase <=> git fetch + git rebase
将远端仓库对应分支的代码拉到本地库,并以rebase的方式合并到本地分支,rebase可以理解为“重新修改基线”,即更新的历史会被写入本地修改代码之前。
举例:
$ cd demo/
$ git pull --rebase
From https://xly.bce.baidu.com/git/xxxx/Baidu/demo
c7f377c..2897d6d master -> origin/master
Already up to date.
Current branch master is up to date.
在线搜索代码
目前只支持搜索单个代码的代码,通过dashboard页面进入具体的代码库(如下图,进入baidu/demo代码库),在导航栏中搜索框输入要搜索的关键词,即可。