Git服务器搭建笔记
前言:最近公司要使用git服务器对Android4.4的源码进行版本控制,所以花了些时间在Ubuntu14.04上搭建了git服务器,正好前段时间也学习了下git的使用哈哈
------------------------------------------------------------------------
平台:Ubuntu14.04
------------------------------------------------------------------------
1.首先在服务器上需要下载一些软件
sudo apt-get install git-core python-setuptools openssh-server openssh-client
2.新建一个git用户,当我们再服务器上管理git版本库的时候只允许使用git用户(root用户当然除外)
sudo useradd -m git
sudo passwd git
3.安装Gitosis软件,该软件用来管理团队成员对远程仓库的访问权限等
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
sudo python setup.py install
注意github网址那是2个数字0呢,不是大写的字母o
4.选择一台计算机作为服务器管理员远程管理服务器,所以这一步应该在管理员的计算机上操作
4.1.安装git客户端
sudo apt-get install git
4.2.生成ssh密钥
ssh-keygen -t rsa
4.3.使用ssh把生成的密钥推送到服务器上,XXX表示管理员计算机的用户名,serverIP表示服务器的IP地址,也就是推送到/tmp/目录下
scp /home/XXX/.ssh/id_rsa.pub git@serverIP:/tmp
5.切换到服务器上,把刚刚推送过来的秘钥生效,
注意:在执行这条命令之前请确保/home/git/下没有.ssh文件夹,若有请手动删除,因为在执行gitosis-init命令时会在/home/git目录下创建一个.ssh目录,同时在.ssh目录下创建authorized_keys文件,并且将id_rsa.pub这个密钥写入authorized_keys这个文件中,这样该密钥的拥有者就对gitosis-admin.git这个仓库具有访问权限.
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
执行这条命令后会打印如下log:
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
由log我们可以看到已经自动生成了一个gitosis-admin的仓库,同时以后git的默认仓库路径都在/home/git/repositories/下
6.需要对其中的一个post-update文件添加可执行的权限
sudo chmod /home/gitrepository/gitosis-admin.git/hooks/post-update
好啦,到这为止,服务器已经搭建好啦,但是现在貌似只有管理员的计算机能访问git服务器上的仓库哦,因为现在服务器上只有管理员的ssh秘钥呢,所以接下来继续配置团队中其他成员的访问权限
这里就需要gitosis上场啦,gitosis就是用来管理authorized_keys文件和简单连接限制的脚本。添加、删除用户或设定权限这些工作是通过管理一个特殊的git仓库来实现的,你只需要在这个仓库做好相应的设置,然后推送到服务器上,gitosis就会随之改变策略,而这个特殊的git仓库就是刚刚生成的gitosis-admin.git啦
既然服务器上的环境已经搭建好了,那么之后的步骤就不需要在服务器上操作啦,切换到管理员的计算机上进行第6步
7.克隆git特殊仓库到管理员计算机上,同样serverIP还是服务器IP地址
git clone git@serverIP:gitosis-admin.git
执行这条语句会得到一个gitosis-admin文件夹,里面包括一个gitosis.conf文件和一个keydir文件夹,gitosis.conf主要是配置用户、仓库和权限的配置文件,而keydir目录中则保存的是用户的密钥,每个用户都得有一个.pub结尾的文件
我们看下gitosis.conf文件的具体内容
$ cat gitosis.conf
[gitosis] [group gitosis-admin]
members = scott
writable = gitosis-admin
我们可以这么理解,对于一个gitosis-admin组中,成员scott对gitosis-admin仓库有读写权限,这也就是我们管理员的用户名以及对gitosis-admin仓库的管理权限
8.在服务器上增加一个git仓库,同时配置成员属性
当我们需要添加一个新git项目时,由于gitosis-admin仓库只有管理员具有读写权限,所以只有管理员才有权限去增加git仓库或者管理项目成员
这里假设需要新建一个test仓库,同时需要增加john,jet成员一起进行版本控制,需要如下几步
8.1.拿到john与jet的ssh密钥,密钥的生成请参考4.1与4.2,管理员把密钥文件分别命名为john.pub与jet.pub,cp到gitosis-admin/keydir目录下
8.2.更改gitosis.conf文件:
[gitosis] [group gitosis-admin]
members = scott
writable = gitosis-admin [group team]
members = scott john jet
writable = test
注意:这里members指定的用户名必须同".pub"前面的命名相同,例如,如果是scott.pub,那么这里写上scott就可以了,通常,我们生成密钥时会跟上机器的名字,如果你的.pub命名带上"@机器名"的话,那么members这里也要带上@机器名,总之members指定的名字一定要同".pub"前面命名相同。
既然是权限控制,那么肯定有只读的权限啦
[group testread]
members = xiaoming
readonly = test
8.3.提交到远程服务器上
git init
git add .
git commit -m "yourLog"
git push origin master
如此,就完成了新仓库的创建与用户的配置,如果在Log中需要换行,commit更改为如下指令即可
git commit -m '
.aaa
.bbb
'
这里还有一个问题,在配置的这些用户中都有权限去创建test仓库,所以只需要一人去push就行啦,其他用户可以直接clone代码到本地库,不然会引起冲突的哦
说明:当我们在gitosis.conf文件中声明了仓库名,所以我们不需要在服务器上新建一个仓库了,因为当我们第一次提交文件到服务器上的时候会自动新建仓库的。
---------------------------------------------------------------<完>------------------------------------------------------------------------
补充:如果我们要提交一个很大的项目,比如Android4.4等系统源码,使用远程push很费时间,还要依赖网络,时时担心网络会不会掉线等
一、所以我们可以在服务器上直接提交代码
1.在服务器上安装git客户端
2.生成密钥,并且把密钥push到服务器上(这里为什么不直接复制?因为在版本库里是找不到密钥文件的,可能是由于安全原因吧)
3.在项目文件夹中执行以下命令
git init
git remote add origin git@127.0.0.1:yourGitProject.git
git add .
git commit -m "yourLog"
git push origin master
像这样很耗时的操作建议自己编写sh脚本让其自动执行,然后我们就可以去干别的事啦
二、git客户端用户信息配置请使用
git config --global user.name "yourname"
git config --global user.email "youremail"
三、还有一种办法可以更改git仓库,不需要让管理员添加密钥
比如仓库里有一个test.git,同时我们知道服务器上git用户的密码,那么嘿嘿嘿嘿
git clone git@serverIP:/home/git/repositories/test.git
对了!使用绝对路径,一般来说,git上的仓库都在默认的/home/git/repositories目录下
如果提示以下错误
Cloning into 'test'... ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly
那么我们加上sudo继续执行上述命令即可
sudo git clone git@serverIP:/home/git/repositories/test.git
接下来会提示你输入git用户的登录密码,当我们输入密码之后,嘿嘿嘿,这个仓库就clone下来了,同样也是可以push的哦,但是每次都需要输入git用户的密码,当然gitosis-admin仓库也可以哦
此方法在我的机器上能实现,不知道大家的能不能实现,当时我还在纠结我明明配置了访问git仓库的用户权限,为何每个用户都能访问了,后来在正确配置密钥然后再clone的时候发现不需要填写git用户的密码了,所以想是不是git用户的密码的原因,因为我已经连接上git了呀,或者就是我服务器没有配置好的原因了,若有大神指导,还请指导一二,不胜感激!!
对了,我的/etc/passwd文件末尾,是没有/bin/sh属性的,如下所示
git:x::::/home/git:
最后补充一个大插曲
由于源码是拿到原厂的源码,而且不是个纯净版本,里面有几百个.git目录与几百个.gitignore文件,由于第一次传git,没有经验,所以没有对这些文件进行处理,就直接往服务器上传了,45w个文件,还好是局域网,10GB半个小时传完了,然后另外一台电脑clone下来,编译,我去,提示缺少文件,然后我就进入了一边编译看缺少哪些文件一边改.gitignore文件,然后push到服务器中,另一台再pull下来,继续编译,就这么折腾了差不多一天,实在受不了了,这简直是个无底洞阿,还不知道要弄到什么时候去,原厂在开发的时候应该是首先拿着纯净的源码,然后一边开发一边写.gitignore文件(因为如果把编译过程中生成的二进制文件也传到服务器中,这对服务器也是个不小的挑战)最后release给我们的源码却没有删掉.gitignore,这怎么办呢?一个一个改?我去好几百文件呢,突然想到不是还有回收站吗,于是,我就把所有的.gitigore文件全部放到回收站里哈哈,然后把剩下的所有源码push到服务器中,接着再从回收站里恢复所有的.gitignore文件,再把这些.gitignore文件加到版本库里push到服务器中,搞定!真是机智
------20170208 update-------------------------------------------------------------------------
问题描述:我在A电脑上更改了compile.sh文件,然后push到远程,然后在B电脑上使用fetch下载刚刚改动的文件,(由于B电脑上工作区改动了很多文件,而我害怕被覆盖,所以使用了fetch而不是pull),然后再使用git checkout [commit] compile.sh更新暂存区与工作区的文件,那么,问题来了:这么做的后果是,当我使用git log的时候无法显示在电脑A上的提交,使用git blame compile.sh命令包含如下信息:
(Not Committed Yet -- :: + ) source build/envsetup.sh
(Not Committed Yet -- :: + ) lunch aosp_avocado-userdebug
这是由于没有合并导致的,可以先使用git log -p master..origin/master查看本地与远程的区别,然后再使用git merge origin/master来合并代码,当然也可以使用pull来实现,只是这么做不太安全,因为不知道到底会合并了哪些文件。
Git服务器搭建笔记的更多相关文章
- 基于阿里云服务器的git服务器搭建
使用阿里云Ubuntu 12.0.4 64位操作系统做git服务器. 首先git服务器有两种访问方式可以选择:http方式和ssh的方式,http方式更容易使用. 1.http方式的git服务器搭建以 ...
- CentOS 6.5下Git服务器搭建
1 . Git服务器搭建 1. 环境部署 系统环境:服务器端:CentOS 6.5 ,ip:192.168.56.1 客户端:CentOS 6.5 ,ip:192.168.56.101 软件版本:服务 ...
- 【转】Windows平台下Git服务器搭建
Windows平台下Git服务器搭建 Posted on 2015-05-18 21:29 阿祥当码农 阅读(7637) 评论(0) 编辑 收藏 该文章转自:http://www.codeceo.co ...
- Git系列(1) Windows下Git服务器搭建
作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 我们这里只需要两个软件git和ssh, ...
- Windows下Git服务器搭建[转]
Windows下Git服务器搭建 作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 ...
- ECS之Git服务器搭建
最简教程 ### . 安装Git 安装Git服务,命令如下: ```Shell $ yum install curl-devel expat-devel gettext-devel openssl-d ...
- git服务器搭建全程
为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具 [root@VM_95_113_centos ~]# yum install curl-devel expat-devel gettext ...
- Windows平台下Git服务器搭建--------gitblit
Windows(server)平台下Git服务器搭建 第一步:下载Java,安装,配置环境变量. 第二步:下载Gitblit.下载地址:http://www.gitblit.com/ 第三步:解压缩下 ...
- 使用gitolite进行git服务器搭建
使用gitolite进行git服务器搭建 https://blog.csdn.net/pan0755/article/details/78460941 使用gitolite搭建,然后需要有个客户端进行 ...
随机推荐
- zigbee之IAR环境搭建
注册机第一个要选择: 为什么? 之前说CC2530是支持zigbee协议的无线芯片,其实它是这款硬件上有一个支持zigbee协议的无线电路,不仅有这款电路,而且还有一块cpu电路,它就是8051cpu ...
- 随机抽样问题(蓄水池问题Reservoir Sampling)
转自:孤影醉残阳 http://hi.baidu.com/siyupy/item/e4bb218fedf4a0864414cfad 随机抽样问题(蓄水池问题Reservoir Sampling) 随即 ...
- 完全卸载memcached的方法(CentOS)
前阵子给服务器装了个memcached,4G的内存,想给网站提提速,实际上不但没有明显效果,反倒耗费内存,看着碍眼,于是想卸载,网上各种搜索+自己实践,搞出一个傻瓜方案来: 1.首先查找你的memca ...
- windows在python基础上安装pip
首先你必须已经安装了python,并且配置好环境 键入pip 复制https://bootstrap.pypa.io/get-pip.py的内容并创建get-pip.py文件(该文件的内容就是刚刚复制 ...
- Shell脚本中$0、$?、$!、$$、$*、$#、$@
1. $$Shell本身的PID(ProcessID) 2. $!Shell最后运行的后台Process的PID 3. $?最后运行的命令的结束代码(返回值) 4. $-使用Set命令设定的Flag一 ...
- ARM启动代码中_main 与用户主程序main()的区别
1.1 问题描述 __main函数的作用是什么呀?1.2 问题剖析 __main函数是C/C++运行时库的一个函数,嵌入式系统在进入应用主程序之前必须有一个初始化的过程,使用__m ...
- windows7开机后,罗技k380无法自动连接解决办法
问题描述: windows7开机后,罗技k380无法自动连接,必须删除设备后重新发现才能正常连接. 解决办法: 是因为笔记本电脑的蓝牙设置问题.按如下设置即可解决. [Bluetooth设置]-[允许 ...
- Maven整理笔记のMaven使用实践
我们通过实践来补充Maven构建的生命周期. 第一步:配置POM 接着上一篇Maven使用,我们先创建一个名为helloworld的文件夹,在helloworld目录下创建pom.xml文件,pom. ...
- Spring.NET 整合Nhibernate
因为最近无意中学了AOP ,所以想一探究竟,看看.net里这个Spring.Net 到底是怎么回事,请有需要的童鞋往下,不需要的请alt+w.因为是先配置的 Nhibernate 所以就从这个开始.开 ...
- 虚拟机ping 不通主机,主机可ping 虚拟机解决方法
在VMware虚拟机里安装了CentOS的系统发现桥接模式Ping不通外网,Ping主机也ping 不通,但是主机可以ping 虚拟机. 百度了以下,原因是w10防火墙搞的鬼,解决办法有两种: 1.关 ...