在我的VPS上安装git服务。 本文的全部内容都是在阿里云ECS的ubuntu 14.04的系统下进行的。前端
公司本部的开发项目可不能放在Github的开源仓库上,放私有仓库又须要必定的花费,崇尚自由的Coder怎么能就这样被束缚了呢?果断想到把源代码就放在公司的服务器上,并且还要加上版本管理工具,最好就是Git!接下来就一块儿来探讨怎样在服务器上搭建Git服务,最后功能足够丰富的话,加上前端页面,还能像Github上同样呢!听起来高大上,其实什么东西都是学会以后就很简单。linux
什么资料都是开发者原版的最清晰最全面,先po上参考文章: 《Git官方文档-服务器上的Git-配置服务器》 其实上面的已经够全面的了,可是对于小白来讲,仍是不可以很好地理解,这里我来补充完善。 PS: 下面约定俗成一下git
终端A 是登陆到远程服务器的git-bash或其余的终端 终端B 是本地操做的git-bash或其余的终端github
安装git工具:shell
# 更新安装源
$ sudo apt-get update
# 安装git工具
$ sudo apt-get install git
复制代码
配置git:ubuntu
git config --global user.name "Your Name"
git config --global user.email "name@mailname.com"
复制代码
查看git的配置信息:vim
git config --list
复制代码
先为你的linux服务器新建一个git用户,个人linux服务器是公司租用ali的测试服务器,先登陆到root超级用户,再操做下面的。PS: 代码中的用户提示符$
当作是#
号便可,由于是root超级用户,不写成是#
的缘由是会变成注释 终端Awindows
$ adduser -d /home/git -m git #没错,用户名就是git,若不存在用户目录,则会建立
#输入设置git用户的密码,此步骤在此不展现,建议密码设置复杂点,毕竟是放在网上的
$ chmod 755 /home/git
$ su git
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
复制代码
PS1: 咱们一旦新建立了用户,就会自动在/home
目录下新建一个与用户名相应的文件夹,通过上述操做,自动新建了/home/git
文件夹,该目录称为git用户的家目录,对其余普通用户是同样的道理 PS2: 超级用户root的家目录不在/home/
下,而是/root
目录 假定这里咱们之前都与Github创建过SSH信任,或者是阅读过个人《一键部署前端代码到服务器》并会建立本地SSH的秘钥与公钥文件,那么下面继续,新开一个git-bash终端B 找到咱们的id_rsa.pub公钥文件目录,而后远程拷贝到服务器: 终端Bbash
$ cd ~/.ssh/
$ ls ./id_rsa.pub
$ scp ./id_rsa.pub root@114.xxx.xxx.xxx:/home/git
复制代码
又回来终端A下继续操做: 终端A服务器
$ su git #切换到git用户
$ cd /home/git #进入git用户的家目录
$ cat ./id_rsa.pub >> .ssh/authorized_keys #将id_rsa.pub文件内容追加到authorized_keys中
复制代码
退出SSH登陆,而后从新以git用户的身份进入便可,再也不须要输入git用户的密码
测试是否能够免密登陆:
ssh -v git@SERVER
复制代码
严重警告: 1. 必须保证git用户的根目录的文件夹权限为 755 2. 必须保证git用户的根目录下的.ssh文件夹权限为 700 3. 必须保证git用户的根目录下的.ssh文件夹中的authorized_keys文件的权限为 600
以git用户的身份远程SSH登陆服务器:
$ ssh git@114.xxx.xxx.xxx
```linux
借助带 `--bare` 选项的 `git init` 命令来为开发者新建一个仓库,该命令在初始化仓库时不会建立工做目录:
```sh
$ cd /home/git #新仓库要创建在哪一个文件夹本身选,方便组织管理就行,我就直接放在git用户的家目录下
$ mkdir testProject.git #建立一个新仓库目录
$ cd testProject.git #进入新仓库目录
$ git init --bare #初始化该新仓库
Initialized empty Git repository in /home/git/testProject.git/
复制代码
至此,一个存在于本身服务器上的git仓库就搭建好了,该仓库的地址就为:git@114.xxx.xxx.xxx:/home/git/testProject.git
,一看,哇靠,跟项目在github上的地址格式是同样的!例如:git@github.com:ironmaxtory/ironmaxtory.github.io.git
,内心着实激动!如今本身的服务器的/home/git
就至关于一个小型简陋的Github仓库了,同理也可以无限的添加新仓库,保存新的工程项目代码。
通过上面两个步骤,就能够关联操做服务器上的git仓库并上传保存本身的代码了:
$ cd testProject #在本地先进入本身的工程代码根目录
$ git remote add tsOrigin git@114.xxx.xxx.xxx:/home/git/testProject.git #添加远程服务器的仓库并取昵称为tsOrigin,区别于github上的origin仓库
$ git push tsOrigin master #向远程仓库推送代码
复制代码
这个场景必须有并且很常见,公司的项目代码通常是多人维护的;就算不是一人维护的,那你上传到测试服务器上的最终目的都是为了在多台电脑上能够下载并上传提交代码,因此须要添加多人协做!其实也很简单,只须要把须要协做的PC上的SSH公钥追加到git用户下家目录的受权钥匙文件/home/git/.ssh/authorized_keys
中便可,用cat
命令。
须要注意的是,目前全部(得到受权的)开发者用户都能以系统用户 git 的身份登陆服务器从而得到一个普通 shell。 借助一个名为 git-shell 的受限 shell 工具,你能够方便地将用户 git 的活动限制在与 Git 相关的范围内。该工具随 Git 软件包一同提供。 若是将 git-shell 设置为用户 git 的登陆 shell(login shell),那么用户 git 便不能得到此服务器的普通 shell 访问权限。 若要使用 git-shell,须要用它替换掉 bash 或 csh,使其成为系统用户的登陆 shell。 为进行上述操做,首先你必须确保 git-shell 已存在于 /etc/shells 文件中,并将git-shell
的位置添加到/etc/shells
目录中
$ cat /etc/shells # see if `git-shell` is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo vim /etc/shells # and add the path to git-shell from last command
复制代码
接下来可使用chsh <username>
来修改任一系统用户的shell:
$ sudo chsh git # and enter the path to git-shell, usually: /usr/bin/git-shell
复制代码
这样,用户 git 就只能利用 SSH 链接对 Git 仓库进行推送和拉取操做,而不能登陆机器并取得普通 shell。 若是试图登陆,你会发现尝试被拒绝,像这样:
$ ssh git@114.xxx.xxx.xxx
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
复制代码
每次远程登陆都要这样ssh root@114.xxx.xxx.xxx
,很麻烦有没有?!没有配域名的并且IP地址复杂后更加恶心有没有?!来一块儿配置一下对于本地的服务器的域名!编辑/c/windows/system32/drivers/etc
目录下的hosts
文件,用editplus
打开便可,以下添加一行:
114.xxx.xxx.xxx (空格) ts.aliyun.com (回车换行)
复制代码
保存退出,通常来讲,并不能当即生效,有以下几种解决方案,反正我全都用了-.-
之后就能够这样:
ssh root@ts.aliyun.com
复制代码
欢迎关注 [程序猿何大叔] 公众号你的关注 就是个人动力