ゼロからrepoサーバを構築する


ここにはrepo+gitサーバ構築と書かれています.クライアントが新しい会社に出勤するわけではありません.会社がAndroid方面の開発を新しくしたためです.Androidを知っている人はいないので、自分でAndroidコード管理ツールを構築するしかありません.gitosis+repoに基づいてAndroidコードを管理します.この環境を構築するのに1週間の時間を浪費する.この文章は他の人のブログも参考にしています!前者の貢献に感謝します.シナリオメーカーが私たちにくれたAndroidソースはgitを持たないので、純粋なAndroidソースです.私は2台のコンピュータAをコードサーバー(192.168.100.182)Bクライアント(192.168.100.181)に使用しています.まず、A側にsudo apt-get install git-core openssh-server openssh-clientインストールgitをインストールする過程で、主にubuntuの中国語サイトからアクセスする問題に遭遇する可能性があります.英語サイトで関連ファイルをダウンロードし、手動でインストールできます.皆さんにリンク先をあげます.http://archive.ubuntu.com/ubuntu/pool/main/2,Aサーバー側でダウンロードしてgitosisをインストールして勝手に1つのディレクトリを創立します例えば:gitosis_setup
mkdir ~/gitosis_setup
cd ~/ gitosis_setup
git clone git://eagain.net/gitosis
          
git clone https://github.com/res0nat0r/gitosis.git

gitosisディレクトリに入りgitosisをインストール
cd gitosis
sudo python setup.py install

注意:python setupの場合.py installに失敗しました.python-setuptoolsをインストールする必要があります.py sudo apt-get install python-setuptools.py
    gitosis
         git  ,          gitosis   。           git,           :
a@server:~$ git config –global user.name “myname”
a@server:~$ git config –global user.email “myname@server

上のmynameはdspと書きましたが、myname@serverと書く[email protected]会社のメールアドレスです.個人の状況によって記入します.gitosisのシステムユーザーを作成(現在のユーザーはwirror 800)
sudo adduser --system --shell /bin/sh --gecos 'git SCM user' --group --disabled-password --home /home/git  git

この方法はネット上で比較的によく見られる方法で、作成したのはパスワードを無効にするgitユーザー3で、新しいgitosis管理者はAがサーバーであれば、B(192.168.100.181)は私のコードサーバーがパソコンを管理するので、Aパソコンのユーザーを管理者としないほうがいいです.私はBパソコンのdynaユーザーをgitosis管理者として使います.B端でコマンドssh-keygen-t rsaを使用してpubを生成する.key
ssh-keygen -t rsa

Bクライアントは/home/dyna/.ssh/id_rsa.pubの下.scp/your pub_を使用できますpath/id_rsa.pub ${SERVER_IP}:id_rsa.pubまたはUディスクコピーまたはその他の方法.id_をrsa.pubはAのtmpディレクトリにコピーする
cd  tmp
sudo chmod 777 id_rsa.pub
sudo -H -u git gitosis-init < id_rsa.pub

(またはgitユーザに切り替えるgitosis-initsudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
クライアントBでgitosis-adminをサーバからクローンする.gitはB端dynaディレクトリの下のtestディレクトリにあります
git clone  git@192.168.100.182:gitosis-admin.git
cd  gitosis-admin

次のファイルが表示されます.confとkeydir/,gitosis.confはgitosisのプロファイルで、ユーザーと権限を構成し、keydir/はすべてのグループメンバーの公開鍵です.vi gitosis.牙列缺损confファイル、内容:
[gitosis]

[group gitosis-admin]
members = dyna@dyna-PowerEdge-R720
writable = gitosis-admin

[group gitosis-admin] 
members = dyna@dyna-PowerEdge-R720 
writable = gitosis-admin 

5、クライアントBでメンバーの公開鍵をシステムに追加します.例えば、私は今ユーザーallenをgitosisシステムに追加します.後でパスワード免除にアクセスします.allenコマンドssh-keygen-t rsa生成keyの過程でenterキーをノックします.パスワードを入力しないでallen生成id_を生成します.rsa.pubはBクライアントgitosis-adminの下にコピーしallenと命名する.pub
cd ../gitosis-admin
cp allen.pub keydir/
git   add allen.pub

修正するconfファイルの一番後ろに次の文字を追加します.
[group apps]
writable = apps
members = dyna@dyna-PowerEdge-R720 allen

倉庫(appsという名前)writable=apps読み取り可能書き込み可能なアクセス可能なメンバーを追加するにはallenとdyna@dyna-PowerEdge-R720
gitosis.conf   
[gitosis]
[group gitosis-admin]
members = dyna@dyna-PowerEdge-R720
writable = gitosis-admin

[group apps]
writable = apps
members = dyna@dyna-PowerEdge-R720 allen
           
git commit -a -m "Granted new members commit rights to apps"
git push
                 
 git clone git@192.168.100.182:apps.git
   gitosis         

以下のブログを参考にhttp://blog.csdn.net/wirror800/article/details/5189564Android repo管理サーバの構築サーバA側に/home/git/repositoriesディレクトリが既に存在する場合は、repositoriesを作成する必要はありません.
sudo su  git
cd /home/git
mkdir repositories 
cd repositories 
git init --bare manifest.git

git-daemonを構築するときにgit-daemon-sysvinitを使っています.git-daemon-runでずっと問題が発生しています.仕事をしない
sudo apt-get install git-daemon-sysvinit

3.プロファイルのこの場所の前にいくつかの問題が発生して、それから私はまた一歩分析/etc/init.d/git-daemonスクリプトファイル、最後に構成方法を見つけました.プロファイルは/etc/default/git-daemonで編集sudo vi/etc/default/git-daemonを開きます.私が使用しているgit倉庫としてのディレクトリは/home/git/repositoriesです.あなたたちは自分と同じものに変えればいい.
# Defaults for git-daemon initscript
# sourced by /etc/init.d/git-daemon
# installed at /etc/default/git-daemon by the maintainer scripts

#
# This is a POSIX shell fragment
#

GIT_DAEMON_ENABLE=true
GIT_DAEMON_USER=git
GIT_DAEMON_DIRECTORY=/home/git/repositories

# Additional options that are passed to the Daemon.
GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"  
GIT_DAEMON_BASE_PATH=/home/git/repositories 

この文章を参考にして構築することができるhttp://blog.csdn.net/fdl19881/article/details/8679469ここでGIT_DAEMON_ENABLE=trueは明らかにtrue値に設定されているGIT_DAEMON_USER=gitこれはあなたがどのユーザーでgit-daemonを実行したいかによって決まります.一般的には安全のために他のユーザーを設定しなければなりません...注意!!設定したこのユーザーは必ずGIT_DAEMON_BASE_PATHには、読む、書く、実行するすべての権限があります!!ls-ld git倉庫ディレクトリを使用してdrwxとして表示できます.git倉庫が自分の個人ディレクトリの下にある場合は/home/use_です.nameの下では、あなたのユーザー名が間違いないように設定されています.GIT_DAEMON_DIRECTORY="/var/cache/git/home/git/repositories"これはディレクトリホワイトリストに設定されていますwhitelist!!設定しないとgit操作時にgit clone、git pushなどのユーザーにno such directoryが現れる.サーバマシンに/var/log/sysyslogに'/home/git/repositories/xxxが表示されます.git’: not in whitelist GIT_DAEMON_OPTIONSは設定パラメータです.アップロードしたい場合、すべてエクスポートします.設定–export-all–enable=upload-pack–enable=upload-archive–enable=receive-pack注意!見つからない場合は/home/git/repositoriesディレクトリの下にあるプロジェクトウェアハウスディレクトリの下にあるtouch git-daemon-export-ok..この名前のファイルを生成すればいいです.git push機能を使用するには、必ず-enable=receive-pack最後のGIT_を開きます.DAEMON_BASE_PATHはルートディレクトリを設定します.例えば私のような設定です.git cloneを使っています.git://your ip or name/test.gitの場合、gitサーバは/home/git/repositories/testを検索します.gitディレクトリです.
以上の設定が完了すると、起動するたびに自分で起動します.sudo service git-daemon start|restart|stop制御も使用できます.sudo/etc/init.d/git-daemon start|restart|stopでもよい.
そしてBクライアントで
cd  /home/dyna/
git clone git@192.168.100.182:manifest.git
cd manifest

を選択します.xmlはこのディレクトリにコピーされ、このファイルはこのAndroidソースとセットになっています.自分で他人の作成を参考にすることはできません.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote name="ppbox" fetch=".." review="ssh://innrom.pptv.com/ppbox/mtk/" />
  <default revision="ppbox-mtk15" remote="ppbox" sync-j="1" />

  <project path="build" name="platform/build" >
    <copyfile src="core/root.mk" dest="Makefile" />
  </project>
  <project path="abi/cpp" name="platform/abi/cpp" />
  <project path="art" name="platform/art" />
  <project path="bionic" name="platform/bionic" />
  <project path="bootable/bootloader/lk" name="platform/bootable/bootloader/lk" />
  <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" />
  <project path="bootable/recovery" name="platform/bootable/recovery" />
  <project path="cts" name="platform/cts" />
  <project path="dalvik" name="platform/dalvik" />
  <project path="developers/build" name="platform/developers/build" />
  <project path="developers/samples/android" name="platform/developers/samples/android" />
  <project path="development" name="platform/development" />
  <project path="device/asus/deb" name="device/asus/deb" />
  <project path="device/asus/flo" name="device/asus/flo" />
  <project path="device/asus/flo-kernel" name="device/asus/flo-kernel" />
  <project path="device/asus/grouper" name="device/asus/grouper" />

上のdefault.xmlファイルpush倉庫へ
git  add  .
git commit -m"Init Commit"
git push      git push --all
  A      /home/git/repositories         Android 
project path      
    cat default.xml | cut -d '"'   -f 2 > src.txt
        A        ,         

cat src.txt | ./src.shスクリプト内容
#/bin/bash
set -x
set -e
pwd=${PWD}

cd /home/git/repositories
while read line; do
    if [ -z "$line" ]; then
        echo $work_dir not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
        git init --bare $line.git
        echo ==== $line
        pwd
done

このスクリプトは、/home/git/repositoriesディレクトリの下に関連するgitウェアハウスを構築します.
kernel.git    mediatek.git  
device          manifest.git  platform      vendor.git

Bクライアントでディレクトリ/home/dyna/or_android/何も持っていない.gitか.svnのきれいなAndroidソースはcat defaultを使用します.xml | cut -d ‘”’ -f 4 > des.txt
 cat default.xml | cut -d '"'   -f 4
UTF-8
<manifest>
platform/build
Makefile
  </project>
platform/abi/cpp
platform/art
platform/bionic
platform/bootable/bootloader/lk
platform/bootable/diskinstaller
platform/bootable/recovery
platform/cts
platform/dalvik
platform/developers/build
platform/developers/samples/android
platform/development
device/asus/deb
device/asus/flo
device/asus/flo-kernel
device/asus/grouper
device/asus/tilapia
device/common
device/generic/armv7-a-neon
device/generic/common
device/generic/goldfish
device/generic/mips
device/generic/mini-emulator-armv7-a-neon
device/generic/mini-emulator-mips
device/generic/mini-emulator-x86
device/generic/x86
device/google/accessory/arduino
device/google/accessory/demokit
device/lge/hammerhead
device/lge/hammerhead-kernel
device/lge/mako

上の無関係文字をUTF-8 Makefileを削除して、サービス側のパスにアップロードするテキストを得るには、次のコマンドcat desを使用します.txt | ./des.sh des.shの内容は以下の通りである.
#/bin/bash

set -x
set -e

para1=
work_dir=$1

pwd=${PWD}

while read line; do
    line1=${line%%/*}
    if [ -z "$line" ]; then
        echo $work_dir not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
    if [ $(ls -A $pwd/$line | wc -l) -eq 0 ]; then
        echo $work_dir empty !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2
        continue
    fi
    workdir=$pwd/$line
    echo ==== $workdir
    cd $workdir
        rm -rf .git
        git init .  1>&2
        git add . -f 1>&2
        git commit -m "Initial commit" 1>&2
        if [ "$line1" = "device" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        elif [ "$line1" = "kernel" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        elif [ "$line1" = "mediatek" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        elif [ "$line1" = "vendor" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        else
            git push --set-upstream git://192.168.100.182/platform/$line.git master
        fi
    cd -
done

これでローカルAndroidソースをB側サーバー側の倉庫にプッシュしました.dynaディレクトリでgit-repoをダウンロードします.git git clone https://gerrit.googlesource.com/git-repo git-repo.git上の住所がだめなら.自分でネットでダウンロードできるものを探します.cd git-repo.git修正repo
##
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
REPO_REV = 'stable'
   
REPO_URL = /home/dyna/git-repo.git      repo            
REPO_REV = 'master'      git  branch       git-repo.git  ;     git  branch    。     master   

git-repo.gitディレクトリの下のrepoを/usr/bin sudo cp repo/usr/bin新規ディレクトリmkdir/home/dyna/testテストAndroid cd test repo init-uにコピーgit://192.168.100.182/manifest.gitrepo sync以下は参考ブログです
http://blog.csdn.net/seker_xinjian/article/details/6232475 http://blog.csdn.net/fdl19881/article/details/8679469 http://blog.csdn.net/ice520301/article/details/6142503