linux建立多个repo,git+repo的搭建过程

此文章是分为Git搭建和repo搭建,以及repo Android仓库的创建

Git搭建公用版代码服务器

apt-get install git

确保ssh已经正常安装并使用。

useradd  -m git

apt-get install python-setuptools

git config --global user.name "S905-server"

git config --global user.email

查看成功与否则是:cat ~/.gitconfig 这里是root查看,如果不是root,相应目录即可。

mkdir一个目录。

git clone

进入到gitosis目录。

python setup.py install

创建密匙。

ssh-keygen -t rsa一路回车即可。

mkdir ~/tmp

cp ~/.ssh/id_rsa.pub ~/tmp

sudo -H -u git gitosis-init< ~/tmp/id_rsa.pub

对于其他git的服务器需要把id_rsa.pub放到如下目录下:

/home/git/repositories/gitosis-admin.git/gitosis-export/keydir

并把名字修改成pub格式文件的末尾名字。

然后加入到authorized_keys下在/home/git/.ssh

同时用cat /home/smb-share/id_rsa.pub >> authorized_keys

Git客户端搭建

apt-get install git ,git-core,curl.

git config --global user.name "S905-client"

git config --global user.email

ssh-keygen -t rsa

生成的密匙拷贝到server中。

/home/git/repositories/gitosis-admin.git/gitosis-export/keydir

在/home/git/.ssh

同时用cat /home/smb-share/id_rsa.pub >> authorized_keys

git clone git@IP :DIR

如果我后期增加一个 allen 到gitosis 系统中,以后访问免密码

在 allen 命令 ssh-keygen -t rsa 生成key 过程中敲 enter 键,不要输入密码

把 allen 生成 id_rsa.pub 拷贝到服务端如上。

/home/git/repositories/gitosis-admin.git/gitosis-export/keydir

cat /home/smb-share/id_rsa.pub >> authorized_keys

修改gitosis.conf文件最后面增加 下面 一段文字

[group apps]

writable = apps

members =...allen

表示增加一个 仓库(名字为apps)

writable = apps 可读可写

可以被访问的成员有 allen

git 的具体操作详见操作文档。

Repo server 搭建- 公共代码库

开始使用git-daemon-run,经常出现问题。如下时用法。

mkdir -p ~/bin

curl > ~/bin/repo

chmod a+x ~/bin/repo

这是git-daemon-run 的使用时的配置。

修改/etc/sv/git-daemon/run

#!/bin/sh

exec 2>&1

echo 'git-daemon starting.'

exec chpst -ugitdaemon \

"$(git --exec-path)"/git-daemon --verbose --reuseaddr \

--base-path=/var/lib /var/lib/git

修改为如下:

--export-all --base-path=/PATH /PATH

--export-all 则是导出共享所有目录,否则需要在每个要导出的目录下做如下操作:

#touch git-daemon-export-ok

--base-path 是映射目录,后边的PATH是镜像目录。

PATH=/home/s905x/code/Android7.1/

在manifest.git/config 中追加如下几行:

[daemon]

uploadpack=true

uploadarch=true

receivepack=true

随便一个path

git clone /home/s905x/code/Android7.1/s905x-innopro/905x-7.0-repo/.repo/manifests.git

git branch -a

remotes/origin/default

remotes/origin/matser

git checkout remotes/origin/default

git checkout -b master

修改后,git add ,git commit

git push --all

在服务器中切换到 master,如有了,则是git branch -D master,

然后在git push --all

修改.repo/manifests/default.xml

fetch:则是url fetch+name是每个git的地址。Name则是每个远程仓库的名字。

master则是git push --set-upstream 后创建的分支。

name与fetch一起用,patch则是从仓库同步代码时放的位置。

另外一种的用法则是:apt-get install git-daemon-sysvinit

git-daemon-sysvinit配置为:/etc/default/git-daemon

GIT_DAEMON_ENABLE=true

GIT_DAEMON_USER=git

GIT_DAEMON_BASE_PATH=/opt/server

GIT_DAEMON_DIRECTORY=/opt/server

# 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 init --bare manifest.git

然后在别的地方clone ,把default.xml放到该文件下,修改OK后,git add ,git commit 即可。

git push --set-upstream /home/s905x/code/server/manifest.git master

cat n-amlogic_openlinux-20170222-ott.xml | cut -d '"' -f 4 > repos_201796.txt

vim repos_201796.txt删掉其中空格,Makefile,以及其他。

创建repos_201796.sh,777 如下

#/bin/bash

set -x

set -e

pwd=${PWD}

cd /opt/server

while read line; do

if [ -z "$line" ]; then

echo $work_dir not exist !!!!!!!!!! 1>&2

continue

fi

sleep 1

git init --bare $line.git

chown -R git:git $line.git

sleep 1

echo ==== $line

pwd

执行cat repos_201796.txt | . repos_201796.sh

删除源码中的所有.git和.svn

find ./* -name ".git"| xargs rm -rf

find  ./* -type d -empty 查找所有的空文件。

在repo的管理中,很多空文件没办法加进去,只能在空文件里创建.gitkeep和.gitignore

在.gitignore中加入!.gitkeep

创建脚本,自动化复制。

#/bin/bash

set -x

set -e

cd /home/code/s905x/905x-7.0-repo

pwd=${PWD}

workdir=$1

while read line; do

if [ -z "$line" ]; then

echo $work_dir not exist !!!!!!!!!! 1>&2

continue

fi

workdir=$pwd/$line

echo ==== $workdir

cp /home/smb-share/.gitkeep $workdir -arf

cp /home/smb-share/.gitignore $workdir -arf

pwd

done

制作脚本repoinit_201796.sh,并拷贝到不带有任何.git和.svn的源代码下。

cat n-amlogic_openlinux-20170222-ott.xml | cut -d '"' -f 2 > src_201796.txt

#/bin/bash

set -x

set -e

cd /home/code/s905x/905x-7.0-repo

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

sleep 1

if [ "$line1" = "device" ]; then

git push --set-upstream /opt/server/$line.git master

sleep 1

elif [ "$line1" = "vendor" ]; then

git push --set-upstream /opt/server/$line.git master

sleep 1

else

git push --set-upstream /opt/server/$line.git master

sleep 1

fi

cd -

done

cat src_201796.txt | . src_201796.sh

以上搭建的中心则是在目录下创建仓库,然后分别提交文件。Amlogic的经过处理的,大部分文件被放到platform中。不晓得好处在哪里。

/etc/init.d/git-daemon start|restart|stop

repo client

然后在另外一台电脑上测试和安装

apt-get install phablet-tools

在/usr/bin/repo

REPO_URL = ''

REPO_URL = /home/gitadmin/gitCfg/git-repo.git //待测试。

#REPO_URL = 'git://192.168.2.37/905x-7.0-repo/git-repo'

repo init -u git://192.168.2.37/905x-7.0-repo/.repo/manifests.git -m default.xml -b default

repo sync

repo start s905x --all

将每一个的project都设置远程仓库别名。

如下脚本:

#/bin/bash

set -x

set -e

pwd=${PWD}

cd /home/code/s905x/build

while read line; do

if [ -z "$line" ]; then

echo $work_dir not exist !!!!!!!!!! 1>&2

continue

fi

sleep 1

repo forall $line -c git remote add $line git://192.168.2.14/$line

sleep 1

echo ==== $line

pwd

done

如此操作后,提交代码则

以下是我管理项目中常用的命令:不给出具体使用方法,实践出真知

git add /git commit -a -m

git log /git status/git diff

git reset HEAD /git checkout file

git branch /-a/-r

git branch name

git branch -d name 删除

git branch -m name1 name2

远程分支的创建删除

git remote -v/  git remote add name URL

git push name name1:name2 此时则是 name2就是在仓库里的了。

git push name :name2 则是删除name2的分支。

或者用git push name --delete name2

git formate-patch

git 可以打包zip或者差分文件

至此远程分支创建,当我们git clone 或者repo init 都加个 -b name则是下载的是name的分支。

下载则是直接repo sync ,如果未同步过则是执行同步,如果同步过,则是执行更新。

repo start name --all 这里创建的是xml文件的原始环境

repo branch

repo abandon branchname

repo status

repo forall project -c git remote -v

git remote 用于显示远程主机。-v 用于显示网址。

git remote add + name + URL 是用来指定主机名字。

git branch -a , git branch name

git fetch origin master 远程主机有更新,更新到本地。主机名和分支。

git push :

git pull --rebase :

repo forall -c 'git remote add mykorg /pub/gittrees/our-repository/\

$REPO_PROJECT.git $@'

repo forall -c git push myorg master-2.1_r2:refs/heads/master-2.1_r2

repo 的基本操作详见文档。

Error 总结

Error1 :

pack: aborting due to possible repository corruption on the remote side.

remote: aborting due to possible repository corruption on the remote side.

fatal: early EOF

fatal: index-pack failed

在.git config中加入

[pack]

window = 0

代码获得后要建立branch

Error2 :

error: inflate: data stream error (incorrect data check)B/s

fatal: pack has bad object at offset 26259705: inflate returned -3

error: Cannot fetch prebuilts/go/darwin-x86

则是在server中删掉.git

重新做git init --bare $project.git

git push --set-upstream /home/s905x/code/server/manifest.git master

Error3:prebuilts/qemu-kernel

fatal: The remote end hung up unexpectedly

fatal: protocol error: bad pack header

在manifest.xml中去掉clone =1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值