求助:git服务器搭建 windows
搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的用户账号,下面,正式开始安装。
第一步,安装git:
$ sudo apt-get install git
第二步,创建一个git用户,用来运行git服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsapub文件,把所有公钥导入到/home/git/ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/samplegit,在/srv目录下输入命令:
$ sudo git init --bare samplegit
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以git结尾。然后,把owner改为git:
$ sudo chown -R git:git samplegit
需要服务器找我:展翼小T
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/samplegit
Cloning into 'sample'
warning: You appear to have cloned an empty repository
剩下的推送就简单了。
管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
管理权限
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。
通过以下的步骤,你将在服务器上搭建并使用你自己的Git服务,例如myhostexamplecom。其中的一些步骤,像email通知,限制用户的权限,特定分组的接入管理,都是依据你的要求和现实状况的可选项。还有很多命令,你需要root权限才能执行,所以别忘了用sudo,或者(最好不要)直接切换到root来执行。
为有读写权限的用户建立一个分组。根据你的操作系统,你可以用groupadd命令来实现,用vigr来编辑分组文件,或者直接编辑/etc/group文件。在最后,你会在/etc/group文件中看到如下一行
repogroup::10005:marry,john,violet
其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字,marry,john,violet则是获准接入这个仓库的用户。
决定Git仓库的路径。它既可以放在你的home路径下(eg /home/yourname/gitroot),也可以放在一个专用的路径下(eg /var/gitroot)
配置权限,让Git用户可以访问这个目录
chmod g+rx /path-to/gitroot
chown :grouprepo /path-to/gitroot
建立新的Git仓库,叫做newrepo
cd /path-to/gitroot
git init --bare newrepogit
建立路径认证,以允许用户组访问,同时有针对性的设置Git
cd newrepogit
chown -R :grouprepo
git config coresharedRepository group
find -type d -print0 | xargs -0 chmod 2770
find -type f -print0 | xargs -0 chmod g=u
设置提交(commit)的email通知(commit是一条命令),这样当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
echo 'One-line project description' >description
git config --local hooksmailinglist email-a@examplecom,email-b@examplecom,
git config --local hooksemailprefix '[DI-PR] '
git config --local hooksshowrev "git show -C %s; echo"
git config --local hooksemailmaxlines 100
通过设置一个称为钩子(hook)的东东,来创建这些email通知。
cd hooks
cp post-receivesample post-receive
chmod +x post-receive
从post-receive的脚本中移除掉最后一行注释的#字号,最后语句应该是这样的
/path-to-hooks/post-receive-email
在你的库中先放入一个文件(比如README)。为了避免其他用户在第一次提交时遇到奇怪的错误信息时感到困惑,这是有必要的。
cd to-your-personal-working-directory
git clone myhostexamplecom:/path-to/gitroot/newrepogit
echo "Short project description" >READMEtxt
git add READMEtxt
git commit -a -m "Add README file"
git push origin master # 第一次仅仅需要T"origin master" 这个参数
为仓库的其他用户建立账户。依据你系统的不同,你可以通过useradd 或者adduser来实现。
设置用户可以通过公/私钥配对来访问。这包括以下几步:
1)已经有公钥的用户,只需要把公钥发给你就好。
2)没有公钥的用户,必须用ssh-keygen命令来生成一个,然后把ssh/id_rsapub发给你就可以了。
3)之后你必须在他们对应的账户下面建立这种公/私钥配对。复制他的公钥,然后顺序执行下面的命令。
sudo su - username
mkdir -p ssh
cat >>ssh/authorized_keys <<\EOF
paste-key-as-one-line
EOF
exit
改变用户的账户让他们使用受限的shell。如果你想让你添加进来的用户仅仅使用Git,而不是Unix的所有东西,那么就设置他们的账户,让他们只能使用Git。Git提供了这种专为这种需求设计的受限shell。它通常被安装在 /usr/libexec/git-core/git-shell or /usr/local/libexec/git-core/git-shell。因此,对所有你想限制权限的用户,你可以执行以下命令。
sudo chsh -s /usr/libexec/git-core/git-shell username
告诉你的用户,用下面的语句来克隆仓库到本地。
git clone myhostexamplecom:/path-to/gitroot/newrepogit
到了这里,恭喜你,你成功了!
首先我们分别在Git服务器和客户机中安装Git服务程序(刚刚实验安装过就不用安装了):
[root@linuxprobe ~]# yum install git
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management You can use subscription-manager to register
Package git-1831-4el7x86_64 already installed and latest version
Nothing to do
然后创建Git版本仓库,一般规范的方式要以git为后缀:
[root@linuxprobe ~]# mkdir linuxprobegit
修改Git版本仓库的所有者与所有组:
[root@linuxprobe ~]# chown -Rf git:git linuxprobegit/
初始化Git版本仓库:
[root@linuxprobe ~]# cd linuxprobegit/
[root@linuxprobe linuxprobegit]# git --bare init
Initialized empty Git repository in /root/linuxprobegit/
其实此时你的Git服务器就已经部署好了,但用户还不能向你推送数据,也不能克隆你的Git版本仓库,因为我们要在服务器上开放至少一种支持Git的协议,比如HTTP/HTTPS/SSH等,现在用的最多的就是HTTPS和SSH,我们切换至Git客户机来生成SSH密钥:
[root@linuxprobe ~]# ssh-keygen
Generating public/private rsa key pair
Enter file in which to save the key (/root/ssh/id_rsa):
Created directory '/root/ssh'
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/ssh/id_rsa
Your public key has been saved in /root/ssh/id_rsapub
The key fingerprint is:
65:4a:53:0d:4f:ee:49:4f:94:24:82:16:7a:dd:1f:28 root@linuxprobecom
The key's randomart image is:
+--[ RSA 2048]----+
| o+ooo |
| oo + |
| + E o |
| o = + = |
| S o o |
| |
| |
| |
| |
+-----------------+
将客户机的公钥传递给Git服务器:
[root@linuxprobe ~]# ssh-copy-id 1921681010
root@1921681010's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '1921681010'"
and check to make sure that only the key(s) you wanted were added
此时就已经可以从Git服务器中克隆版本仓库了(此时目录内没有文件是正常的):
[root@linuxprobe ~]# git clone root@1921681010:/root/linuxprobegit
Cloning into 'linuxprobe'
warning: You appear to have cloned an empty repository
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]#
初始化下Git工作环境:
[root@linuxprobe ~]# git config --global username "Liu Chuan"
[root@linuxprobe ~]# git config --global useremail "root@linuxprobecom"
[root@linuxprobe ~]# git config --global coreeditor vim
向Git版本仓库中提交一个新文件:
[root@linuxprobe linuxprobe]# echo "I successfully cloned the Git repository" > readmetxt
[root@linuxprobe linuxprobe]# git add readmetxt
[root@linuxprobe linuxprobe]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached " to unstage)
#
# new file: readmetxt
#
[root@linuxprobe linuxprobe]# git commit -m "Clone the Git repository"
[master (root-commit) c3961c9] Clone the Git repository
Committer: root
1 file changed, 1 insertion(+)
create mode 100644 readmetxt
[root@linuxprobe linuxprobe]# git status
# On branch master
nothing to commit, working directory clean
但是这次的操作还是只将文件提交到了本地的Git版本仓库,并没有推送到远程Git服务器,所以我们来定义下远程的Git服务器吧:
[root@linuxprobe linuxprobe]# git remote add server root@1921681010:/root/linuxprobegit
将文件提交到远程Git服务器吧:
[root@linuxprobe linuxprobe]# git push -u server master
Counting objects: 3, done
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done
Total 3 (delta 0), reused 0 (delta 0)
To root@1921681010:/root/linuxprobegit
[new branch] master -> master
Branch master set up to track remote branch master from server
为了验证真的是推送到了远程的Git服务,你可以换个目录再克隆一份版本仓库(虽然在工作中毫无意义):
[root@linuxprobe linuxprobe]# cd /Desktop
[root@linuxprobe Desktop]# git clone root@1921681010:/root/linuxprobegit
Cloning into 'linuxprobe'
remote: Counting objects: 3, done
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done
[root@linuxprobe Desktop]# cd linuxprobe/
[root@linuxprobe linuxprobe]# cat readmetxt
I successfully cloned the Git repository
http://wwwlinuxprobecom/chapter-21html#214_Git这篇是详细介绍Git的,中间有一部分是怎么去搭建,你可以看下
第一步,下载gitblit
http://gitblitcom/
这里当然是选择linux/osx的版本。下载下来是一个targz的压缩文件,我下载时最新版本是gitblit-171targz
第二步,配置gitblit
创建目录,作为git服务器存储数据的根目录,比如我这里的目录是:
/Users/xxxx/gitserver/gitRepository
解压第一步下载的文件,然后进入data子目录,找到defaultsproperties打开。这里的很多配置项都可以使用缺省,不过一般会把
gitrepositoriesFolder配置下。这里就配置成上面新建的目录gitRepository的路径。
然后找到serverhttpPort,设定http协议的端口号,这个端口号理论上来说可以随便指定,这里我设置成7070。
保存,关闭
启动gitblit服务,这里我只给出手动启动的方式(自动随系统启动还没研究,哈哈),其实手动方式也不麻烦,安装包里做好了可执行的脚本,我们只要在
终端运行就可以了,如下所示:
第三步,测试git服务器
打开浏览器,输入http://localhost:7070/(localhost也可以换成你本机的ip地址),进入gitblit web管理页面:
默认的用户名和密码是admin,强烈建议登陆后修改密码。登陆后创建一个用户,然后在该用户下创建项目目录,这里叫leanrgit
然后用本地的一个git工作目录与之关联,就可以commit,push这些操作了:
在服务器上生成Windows用户,取消用户下次登录时须更改密码,设置密码永不过期:
2
将该用户隶属于GitUser组(如尚未生成改组,则先生成改组):
END
激活用户
在Windows启动程序组中,运行如下程序(C:\Program Files\ICW\bin\ copsshcpexe):
进入COPSSH Control Panel应用对话框,正常情况下服务应该为正在运行(图标为绿色,如为红色,则可尝试点选该按钮,启动该服务):
选择Users页面:
点选Add按钮,出现如下导航对话框:
选择Forward按钮,出现如下页面,选择欲激活的用户对应的域名及用户名:
选择Forward按钮,进入如下页面,选择Linux shell and Sftp,所有选项选中:
选择Forward按钮,进入确认页面,选择Apply:
回到如下页面,选择Apply后,关闭。
搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的用户账号,下面,正式开始安装。
第一步,安装git:
$ sudo apt-get install git
第二步,创建一个git用户,用来运行git服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsapub文件,把所有公钥导入到/home/git/ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/samplegit,在/srv目录下输入命令:
$ sudo git init --bare samplegit
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以git结尾。然后,把owner改为git:
$ sudo chown -R git:git samplegit
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/samplegit
Cloning into 'sample'
warning: You appear to have cloned an empty repository
我现在使用的是小鸟云,他们目前官网有活动,3折优惠,建议去看看!
0条评论