repo 服务器环境搭建及客户端使用

1.  repo准备
    a. 创建repo的git仓库  --在服务器端创建
# cd /opt/git
# mkdir  -p tv608/manifest.git
# cd tv608/manifest.git
# git init --bare


    b. 将repo仓库添加到gitosis
# git  clone git@gitserver:gitosis-admin.git
# cd gitosis-admin
# vi gitosis.conf
[group repo-worker]
writable = manifest
members = root@darling
# git add gitosis.conf
# git commit -m "add repo manifest"
# git push


    c. 初始化repo manifest.git仓库的master分支   --在客户端创建及提交
# mkdir manifest
# cd manifest
# git init
# touch readme
# git add .
# git remote add origin [email protected]:tv608/manifest.git
# git push origin master


    d. 为repo仓库添加default.xml文件


2. xml 格式详解




 
 
 
 
 
   
 

 
 
 
  ... ...



a.  remote  标签定义远程仓库资源
name  定义的仓库名字,供下面引用
fetch 定义仓库源的url


b.  default 标签定义默认使用的远程仓库,当project没有指定remote远程仓库属性时使用
revision    分支名
remote      远端仓库地址


c.  project 标签定义工厂项目资源
name对应的是远端服务器地址
path对应的是本地代码地址
remote  表示使用的远端仓库地址


3. 客户端使用repo
# /bin/repo  init -u  git://repo-server/tv608/manifest.git
# /bin/repo  sync


可以用 -m 参数来选择获取 repository 中的某一个特定的 manifest 文件,如果不具体指定,那么表示为默认的 


namifest 文件 (default.xml)


repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml


(有诸多供我们选择的manifest文件,所有的manifest文件都放在目录.repo/manifests中,该目录本身亦被git所管


理,你可以cd进去看看)


可以用 -b 参数来指定某个manifest 分支。


repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0


你会发现.repo/manifests是个被git管理的仓库,这里放的是所有的manifest文件(*.xml),因为被git管理,固


然有 分支,-b可以切换到你想要的分支然后再下载相关的xml文件,当然具体下载那个xml还要看-m参数了,所以如果你仅仅


指定-b而没有-m的话,就是下 载-b指定分支下的default.xml文件


如果不指定-b参数,那么会默认使用master分支


4. 如果git clone git://sss/sss  不能够的话,是没有启动守护进程,没有运行远端访问
开启远程git协议访问控制 // 其实git clone git@gitserver_ir:project.git 这样的格式是使用ssh登录git服务


器,是在ssh通道上面执行git协议的

# sudo apt-get install git-daemon-run
安装后会创建下面两个用户
# cat /etc/passwd | grep git
gitlog:x:117:65534::/nonexistent:/bin/false
gitdaemon:x:118:65534::/nonexistent:/bin/false

# dpkg -L git-daemon-run    -- 查看安装包安装了哪些文件

# vim /etc/sv/git-daemon/run 
修改--export-all  --base-path=/opt/git    为你git 的仓库根目录,并添加--export-all参数
加入 --export-all 后,在git仓库中就不必创建git-daemon-export-ok文件。


--enable=receive-pack   加入这个参数后,客户可以提交代码更新,默认是不允许的


# sudo sv stop git-daemon
# sudo sv start git-daemon
或者:
#sudo runsv git-daemon


# git clone git://serverip/project
or
# git clone git://serverip/project.git


5.  repo 配置 是通过在所有的库上面建同样的分支呢,还是通过repo库本身不同版本的xml来控制呢?


6. repo 客户端使用流程
a. 版本管理基本流程
     与知识库交互的基本流程如下:
     1、建立新的分支——repo start
     2、编辑代码文件
     3、stage文件更改——git add
     4、提交更改——git commit
     5、提交更改到review服务器——repo upload


                                            
b. 任务处理
     下面详细介绍了如何使用Repo和Git命令。
     1) 同步本地客户端
      同步所有的工程文件——repo sync
      同步特定的工程文件——repo sync PROJECT0 PROJECT1 PROJECT2 ...
     2) 创建分支
     每当开始编辑文件比如开始修改bug和添加新的功能,需要在本地创建特定的分支。分支并不是原始文件的拷贝,它作


为特定提交的标示,该标示创建本地分支并在分支间进行轻量级切换,分支可以隔绝一个方面的更改。
     创建分支——repo start BRANCH_NAME
     验证新分支的有效性——repo status
    3) 分支使用
     分配分支到特定工程——repo start BRANCH_NAME PROJECT
     本地环境中切换分支——git checkout BRANCH_NAME
     列出所有分支——git branch or repo branches
   4) staging文件
     默认情况下,git工具提示但并不跟踪工程的更改,为了通知git保存代码的变化,我们必须commit代码,即“staging


”。
    stage文件更改——git add
    该命令可以接受任何文件和工程目录,git添加文件到git知识库,并且stage文件更改、删除的记录。
   5) 浏览客户端状态
    展示文件状态——repo status
    展示未提交的文件编辑——repo diff
   6) 提交更改
    git中commit是版本管理的基本单元,包含了工程的目录结构和文件内容。
    创建commit——git commit
    执行该命令后editor中弹出commit提示信息,最好能够提供有益的帮助信息。如果没有添加log信息,该次commit提交会


被遗弃。
   7) 提交更改到Gerrit
    upload之前更新最新的版本——repo sync
    接着提交代码——repo upload
    之后呈现我们提交的更改,并提示我们选择分支。
   8) 处理代码冲突
    提交代码时如果遇到冲突,需要执行以下操作:进入相关的工程目录,针对冲突的文件运行git add和git commit命令,


恢复更改。如下:
     git add .
     git commit 
     git rebase --continue
    恢复更改后再次重复整个更新:
     repo sync PROJECT0 PROJECT1 ... PROJECTN
    如果本地又对刚刚提交的代码进行了修改,提交时可以直接覆盖上次的提交,执行如下命令:
    git add files
    git commit  --amend
    repo upload
   9) 清除客户端文件
    merge代码到Gerrit之后,更新本地的工作目录:
    repo sync
   安全清除陈旧的分支执行以下命令:
    repo prune
   想恢复代码到以前的分支,可以执行以下命令:
    git log
    git reset hard
  10) 删除客户端代码
   由于代码所有的代码信息存储在本地,我们仅需要删除目录即可完成:
    rm -rf WORKING_DIRECTORY
   删除本地代码后将会永久的删除所有提交的更改。

你可能感兴趣的:(svn&git)