前言:最近公司要使用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 755 /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 initgit add .
git commit -m "yourLog"
git push origin master

  如此,就完成了新仓库的创建与用户的配置,如果在Log中需要换行,commit更改为如下指令即可

git commit -m '
1.aaa
2.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:1000:1000::/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命令包含如下信息:

00000000 (Not Committed Yet 2017-02-08 14:16:09 +0800  73)      source build/envsetup.sh
00000000 (Not Committed Yet 2017-02-08 14:16:09 +0800  74)      lunch aosp_avocado-userdebug

这是由于没有合并导致的,可以先使用git log -p master..origin/master查看本地与远程的区别,然后再使用git merge origin/master来合并代码,当然也可以使用pull来实现,只是这么做不太安全,因为不知道到底会合并了哪些文件。

转载于:https://www.cnblogs.com/pngcui/p/6291189.html

Git服务器搭建笔记相关推荐

  1. Gitea——私有git服务器搭建详细教程

    本文将从源代码和docker安装两种方式带大家从0-1通过Gitea搭建一个私有git服务器 Gitea--私有git服务器搭建教程 什么是Gitea 一.源代码安装方式 1. 前置环境要求 2. 下 ...

  2. Git服务器搭建和配置

    Git服务器搭建和配置 参考博客: 1.http://blog.csdn.net/michaelhan3/article/details/51637271 2.http://blog.csdn.net ...

  3. Git服务器搭建过程

    Git服务器搭建过程 作者:家辉  日期:2018年3月16日 CSDN博客:http://blog.csdn.net/gobitan 摘要:本文记录了Gitlab服务器的搭建过程,记录下来备用.安装 ...

  4. Gitea—私有git服务器搭建教程

    Gitea--私有git服务器搭建详细教程 原文章大佬 原文链接:https://blog.csdn.net/qq_45173404/article/details/122277620 什么是Gite ...

  5. 搭建git服务器并管理系统,git服务器搭建与配置管理

    git服务器搭建与配置管理 内容精选 换一换 弹性云服务器(Elastic Cloud Server)是一种可随时自动获取.计算能力可弹性伸缩的云服务器,可帮助您打造可靠.安全.灵活.高效的应用环境, ...

  6. git服务器搭建问题

    CentOS6.5本地搭建. 对于图形化的系统,可以联网,然后CTRL+ALT+F2可以切换到命令行,CTRL+ALT+F1可以切换回桌面图形化. 可以用SSH和FTP来连接服务器和传文件.   (1 ...

  7. GIT服务器搭建(转载)

    一.GIT服务器的搭建 1. 安装Git <pre style="margin: 0px; padding: 0px; white-space: pre-wrap; word-wrap ...

  8. ubuntu下git服务器搭建过程

    需求 硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到. 软件需求:git-core, gitosis, openssh-server, openssh-client, Ap ...

  9. git服务器搭建用账号和密码,git服务器搭建过程

    参考网上资料搭建git过程记录如下: 需求 硬件需求:一台Ubuntu,能通过网络访问到.软件需求:git-core, gitosis, openssh-server, openssh-client ...

最新文章

  1. hashlib模式和hmac模式
  2. 去除JSP页面中JSTL、EL生成的空行
  3. python框架django入门_web框架之Django(python3入门)
  4. 智能实验室-全能优化(Guardio) 4.0.0.670 beta 8
  5. c语言实践教程实验题答案,C语言课后实验教程习题答案
  6. 代理模式、动态代理及其应用
  7. RTT的IPC机制篇——邮箱
  8. 付款更方便了?腾讯接入!微信支持数字人民币支付
  9. 关于GIT的万年坑你还在踩吗?答应我别傻了
  10. 求解图的连通块数量——DFS方法实现
  11. wordpress中文路径出现404错误的解决办法
  12. c语言书籍(c语言书籍)
  13. java音量调节_音量控制setVolumeControlStream
  14. 阿里天池比赛——街景字符编码识别
  15. 推荐系统实践——什么是推荐系统
  16. 小技巧之统计代码行数
  17. 安腾处理器 oracle,英特尔展示下一代安腾处理器Poulson
  18. 自己总结的wireshark抓包技巧
  19. 什么是WMS系统 金蝶仓库条码管理WMS系统介绍
  20. 数据挖掘十大经典算法之——CART 算法

热门文章

  1. mysql 5.7.12 修改密码
  2. 关于项目中的日期提交
  3. Debug javascript inside jsp page 调试jsp嵌入的js
  4. string.format大全
  5. 如何去除Windows8测试版界面“水印”
  6. 详解ISA2006三种客户端
  7. 【性能优化】之 BITMAP 及分区表 的演示
  8. SDNU 1423.入学考试(01背包)
  9. react-native scrollview触摸滚动事件
  10. go 语言系列(二)基本数据类型和操作符