您的位置:首页 > 编程语言

代码管理之使用git搭建简单代码服务器

2017-12-18 20:52 387 查看
本文对已有的一份android源代码进行git远程仓库的搭建,不包含repo和gerrit等内容,仅搭建一个简单的纯git远程仓库服务器。

本文使用了ubuntu14.04系统,在其上的两个用户remote_git和local_git上分别创建远程git仓库和本地git仓库,也就是说是在同一台电脑上完成的操作。

当然也可以使用两台电脑来分别做本地仓库和远程仓库,道理是一样的。

一.创建SSH 服务(创建SSH服务的目的是方便和安全的访问远程服务器,对远程服务器进行操作)

1.在ubuntu系统上新增名为remote_git的用户(其实可以不新建用户,新建用户是为了隔离服务器的git用户和其他用户的权限,保证git仓库不会被轻易的修改)

sudo useradd -m -d /home/remote_git -s /bin/bash remote_git


2.为新建用户设置密码,根据提示输入密码

sudo passwd remote_git


3.切换到remote_git用户。根目录下执行

ssh-keygen -t rsa

一直回车到结束。目的就是生成本用户的.ssh目录和文件id_rsa.pub公钥。

4.确认remote_git/.ssh/authorized_keys是否存在,如果不存在则执行

touch authorized_keys

命令来创建该文件。(authorized_keys文件中用来记录与本用户SSH通信到其他主机到ssh公钥,一行一个,可以添加多个,后面会说)

5.收集所有需要登录的用户(比如开发人员的代码开发的电脑机器)的公钥,就是他们自己的id_rsa.pub 文件的内容。通过在各自电脑用户的根目录下执行ssh-keygen -t rsa 一直回车到结束来获取各自ssh公钥。

6.把所有公钥导入到服务器remote_git用户的/home/remote_git/.ssh/authorized_keys,一行一个。

导入命令: cat userkey id_rsa.pub文件路径 >>/home/remote_git/.ssh/authorized_keys(gitkey路径)。本步骤也可以不用命令,手动打开此文件进行复制粘贴。

 

二、创建源码远程仓库(这里将已有的代码所在的位置为本地仓库,假设路径为/home/local_git/AndroidSourceCode,在local_git用户下)

1.删除本地仓库的源码/home/local_git/AndroidSourceCode里面的.git和.gitignore,保证后续git仓库的搭建不会受到源代码中带的git的影响。(因为本文中搭建的是一个git仓库,但是原base中含有不止一个git仓库,所以要执行此步骤。正常来讲,如果有一份含有多个现成的git仓库的代码,我们想使用repo+git来管理的话,是可以依照原base中的所有git仓库来分别与新建的git远程仓库建立链接,这样可以保留住原base中之前的所有commit修改的信息,步骤是1.在所有git本地库中先分别执行git
remote rm origin解除本地代码中所有git仓库与原无效远程git仓库的链接,这样之后如果再git branch -a查看的话,你本地代码中的所有远程分支就没有了,保留下来的只有本地分支的信息。2.然后执行第二大步第四小步git remote add origin XXXXXXXX,来分别与新建的远程git仓库建立新的关联关系。3.在每个git仓库中将本地保留的分支push到远程git裸库当中去git push origin 本地分支:远程分支,有几个分支就可以push几个分支,命令里的“本地分支”和“远程分支”名称应该是一样的,与本地分支保持一致。这样我们就将原代码中的git仓库重新关联到了新的远程git裸库上去了。):

find . -name .git | xargs rm -rf
find . -name .gitignore | xargs rm -rf


2.clean 源码,目的是删除源码中之前可能存在的编译生成物,编译的生成物是不需要git管理的,如搭建的代码库git仓库保存的不是android源码,则可以省略此步骤:

本地仓库源码根目录执行:

make -j4 clean


3.初始.git 仓库:

建立初始化本地仓库/home/local_git/AndroidSourceCode内的git

(1)本地仓库源码根目录执行:

git init


(2)本地仓库源码根目录执行:

git add -f *


(3)本地仓库源码根目录执行:

git commit -m "修改描述"


其中“修改描述”可以随意填写,但最好有意义。

如果提示需要个人信息则执行如下命令后再次执行上一条命令,邮箱和姓名理论上可以随意填写,最好填写有效的邮箱:

git config --global user.email "xxxx@xxxx.com(你的邮箱)"
git config --global user.name "xxxx(你的姓名)"


4 为本地仓库添加一个远程仓库(以下均以服务器ip地址为192.168.1.20为例)

首先切换到remote_git用户,cd /home/remote_git/,新建目录/home/remote_git/remote_base/remote_base.git,注意虽然.git结尾,但是它是个文件夹。

在git用户下的/home/remote_git/remote_base/remote_base.git目录内部执行git init --bare,这样就初始化了一个远程git裸库,接下来的工作就是将本地的git仓库同远程的这个裸库建立上链接。

切换到本地用户,在本地仓库/home/local_git/AndroidSourceCode目录下执行

git remote add origin remote_git@192.168.1.20:/home/remote_git/remote_base/remote_base.git


如果命令打错了,可以输入

git remote rm origin

然后重新输入remote add的命令。

5 在服务器端通过vim编辑/home/remote_git/remote_base/remote_base.git /.git/config中加入这两行代码,为git配置增加开放push权限。

[receive]
denyCurrentBranch = ignore


6. 切换到本地用户local_git,对本地代码建立一个分支

git checkout -b new_branch


new_branch为新的分支名称,通过命令查看新建的分支
git branch –a


7.切换到本地用户local_git,在本地仓库下push new_branch分支代码到服务器。

git push origin new_branch


以上git远程服务器已经部署完成。

 

三. 通过在本地新建文件夹,然后克隆代码,验证服务器是否可以下载代码。

1.    新建目录testDir

2.    在新建的目录内执行命令,注意最后面有个点:

git clone remote_git@192.168.1.20:/home/remote_git/remote_base/remote_base.git/ -b new_branch .


执行完命令后如果提示需要git密码,则表明该用户的SSH公钥没有加到/home/remote_git/.ssh/authorized_keys中,重新添加即可。本文因为命令格式的问题,有些命令最好还是自己照着打,不要复制粘贴。

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

这种搭建的方法有一个缺点,就是整个android源码是很庞大的,使用一个git仓库来管理实在有些不好,其实最好还是repo配合git进行源码的管理。如果是一般规模的代码使用这个还是可以的。

下面列出一些常用的git代码提交的操作

git status//查看当前修改了哪些文件

git diff//查看文件的具体修改内容

git add//将某个修改或新增的文件提交到本地暂存区

git rm //将某个删除到文件提交到本地暂存区,跟git add类似

git commit -m "[Modify some codes.]"//把本地暂存区的代码提交到本地仓库

git push origin new_branch//把本地git仓库到提交,提交到远程git仓库

git pull origin new_branch//从远程服务器更新代码到本地

git checkout HEAD ****//复位一些尚未放到暂存区的文件的修改。使文件恢复到修改之前的状态(未修改的状态)“****”是需要复位到文件路径

git reset HEAD ****//恢复一些已经git add的文件到add之前的状态

git revert commitID//复位之前到某一笔操作,commitID是之前提交的ID信息

# git format-patch -M master         // 当前分支所有超前master的提交

# git format-patch -s 4e16                // 某次提交以后的所有patch,--4e16指的是SHA1 ID

# git format-patch -1//单次提交

# git format-patch -3                    // 从master往前3个提交的内容,可修改为你想要的数值

# git format-patch –n 07fe            // -n指patch数,07fe对应提交的名称, 某次提交(含)之前的几次提交

### 1.重命名本地分支

git branch -m new-name  #如果当前在要重命名的分支
git branch -m old-name new-name #如果当前不在要重命名的分支


使用下面两条命令来删除远程分支

git branch -r -d origin/branch-name
git push origin :branch-name


在执行git commit --amend的时候,发现进入的步是vim编辑器,感觉很不适应,其实可以配置vim为git的默认编辑器,执行命令为:

git config --global core.editor vim

本地git仓库执行下面命令去掉远程仓库已经没有的但是本地仍然有的远程分支。

git remote prune origin


git命令大全
http://www.cnblogs.com/1-2-3/archive/2010/07/18/git-commands.html
最后附上git操作的一张图片,比较形象。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: