zoukankan      html  css  js  c++  java
  • repo服务器 搭建


    Android开源工程的代码,使用了一个叫repo的工具,有效的管理着Android底下的几百个git工程。

    事实上repo本上并不是一个程序,而是一个脚本工程.......而git才是真正的版本管理工具。

    说白了,repo就是一堆批处理(python语言写的),它把git的命令进行了合理封装,目标就是同时管理多个git工程。


    repo只是联合manifest.git中project list xml的多个工程,统一管理。在运行repo sync的情况下,xml文件中指定的工程都统一被sync下来



    --------------------------------------


    以下就是搭建repo服务器端的步骤,有了它我们也能像Android项目那样在linux系统下同时管理几百个工程了。


    Step 1. 构建git server (ip is 192.168.5.141).


    Step 2. Run following commands to initialized manifest.git repository on the server machine with "Frank" user privilege.

    mkdir repositories
    
    cd repositories
    
    git init --bare manifest.git

    Step 3. Run following commands to initialized a test git repository in the same path with manifest.git with "

    Frank" user privilege. 

    cd repositories
    
    git init --bare project1.git

    Step 4. Run following command on the server machine with administrator privilege.(有什么用?)

    sudo gedit /etc/sv/git-daemon/run

     Modify the last line to:

    exec git-daemon --verbose --enable=receive-pack --export-all <strong>--base-path=/home/Frank/repositories</strong>

     Reboot the machine


    Step 5. Customize manifest.git

    Login a client machine, run following command to clone manifest.git repository:

    mkdir MyRepo
    
    cd MyRepo
    
    git clone Frank@192.168.5.141:repositories/manifest.git
     
    cd manifest
    
    

    Create a default.xml file with following content:


    <?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?>
    
    <strong><manifest></strong>
    
    	<remote name=<span class="code-quote">"korg"</span>  fetch=<span class="code-quote">"git:<span class="code-comment">//192.168.5.141/"</span> review=<span class="code-quote">"review.source.android.com"</span> />
    </span>
    <strong>	<<span class="code-keyword">default</span> revision=<span class="code-quote">"master"</span> remote=<span class="code-quote">"korg"</span> />
    
    	<project path=<span class="code-quote">"project1"</span> name=<span class="code-quote">"project1"</span> /></strong>
    
    </manifest>
    
    

    Run following command to commit default.xml file


    git add --all
    
    git commit -a -m <span class="code-quote">"add <span class="code-keyword">default</span>.xml"</span>
    
    git push --all

    Step 6. Customize Project1.git

    Login a client machine, run following command to clone project1.git repository:


    cd MyRepo
    
    git clone Frank@192.168.5.141:repositories/project1.git
    
    cd project1
    
    echo <span class="code-quote">"Hello Project1"</span> > Hello.txt
    
    

    Run following command to commit Hello.txt file


    git add --all
    
    git commit -a -m <span class="code-quote">"add Hello.txt"</span>
    
    git push --all

    Step 7. Test the repo server

    Run following command on the client machine side.


    mkdir bin
     
    <pre>
    curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

     chmod a+x ~/bin/repo
    
    

    Export ~/bin to system enviroment path.


    mkdir MyProject
     
    cd MyProject
    <strong>
    repo init -u git:</strong><span class="code-comment"><strong>//192.168.5.141/manifest.git</strong>
    </span>
    repo sync
     

    ====================================================================


    repo实例1:

    http://blog.csdn.net/21cnbao/article/details/7272708


    repo实例2:

    http://www.linuxidc.com/Linux/2013-04/83563.htm


    repo实例3:

    http://wenku.baidu.com/link?url=q_fGazjkzNuH8kKluJvm2P_nL4Hdd-EJd8y8VE-NR8XhIpr8qALD3Gdufh4QGLUT-5WzWaXFaXsw9kJPT2SVJbnmo6w9A-Nm48McxCfHfia




    ====================================================================




    备注: 

    curl其实是一个下载工具,下面这个命令其实就是把网络上一个文件下载到了本地bin目录下。
    curl http://android.git.kernel.org/repo > ~/bin/repo

    我们通过chmod a+x ~/bin/repo 使得repo文件可以执行。

    这个文件其实很关键,它相当于启动Repo的启动器。但是,很多初学者都进入了一个误区,认为repo文件就是Repo的全部。
    其实这是不对的,当执行下面这个命令时:repo其实做了很多很多的事情.....

    repo init -u git://192.168.5.141/manifest.git

    1、首先它创建一个.repo的文件夹,这个文件夹是隐藏的。接下来Repo所做的事情都是在.repo这个文件夹底下进行的。

    2、它从网上下载一个repo.git的工程,这个工程才是整整的Repo的全部,也就是我们前面说过的"git命令脚本工程"
    可惜它是使用python语言写的,要想看懂它,实在是不容易....

    3、最后它把"-u git://192.168.5.141/manifest.git"传递给了repo工程。

    manifest.git工程中其实只有一个文件:default.xml,这个文件记录了一个工程列表。

    当我们执行repo sync时,Repo通过解析default.xml这个文件,循环遍历下载所有的工程,从而达到统一管理的目的。

















  • 相关阅读:
    2013年个人总结
    ASP.NET Core SignalR (一):SignalR 概述
    ASP.NET Core 中的配置 【上】
    .NET Core 服务器
    .NET Web 宿主(Web Host)【下】
    .NET Web 宿主(Web Host)【上】
    .NET 通用主机(Generic Host)
    ASP.NET Core中间件
    ASP.NET Core中的依赖注入【下】
    ASP.NET Core中的依赖注入【上】
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744541.html
Copyright © 2011-2022 走看看