我们可以选择将自己的项目托管在GitHub上,以实现多人开发。如果在内网环境开发或者不想将代码托管到GitHub上,那么可以选择在一台自己的服务器上部署Git以实现代码托管和协同开发。
1、安装Git
首先需要在服务器安装Git,如果是可以访问网络,那么可以通过执行yum install git
进行安装;如果不能访问网络,那么可以选择从源代码安装,但这时候需要注意首先要把Git的依赖包安装。可以参考帮助手册。
2、初始化一个裸仓库
关于裸仓库的解释,可以参考这篇文章,可以简单将裸仓库理解为(可能并不严谨)一个不包含任何实质内容、并且可以供开发者进行代码提交的仓库。
初始化一个裸仓库的命令为:git init --bare your-repo.git
,可以看出,由于在初始化时指定了--bare
参数,因此该仓库是一个裸仓库。
假如你当前在/home/projects
路径下,那么在该目录下就会生成一个名为your-repo.git
的仓库,实际上就是一个被Git初始化了的目录。
之所以要在仓库名后面加上.git
,实际上是一种约定俗称的写法,回想一下我们从GitHub上克隆仓库时,仓库名称往往也是以.git
结尾的。
3、将仓库克隆并开始工作
假设你的服务器的ip地址是123.456.78.9,且你的工作电脑有足够的权限来读写服务器(至少是仓库目录),那么接下来要做的事情就是将刚刚创建的仓库克隆到本地。
命令如下:
git clone root@123.456.7.89:/home/projects/your-repo.git
可能会需要你输入远程服务器的密码,一切顺利之后,你会将整个仓库克隆到你的本地工作电脑上。然后你就可以在本地进行编码编写了,完成工作之后,可以进行提交,也可以通过push命令同步代码到远程仓库。
4、注意
上述过程是一种最简单的搭建Git仓库的方法,没有涉及到对协同工作人员的权限的管理。如果你想要了解更加全面的内容,那么就应该去Git的帮助文档查找有关内容。后续我遇到了新的问题,也会补充在这篇文章的第5部分。
5、补充问题
5.1 关于push权限的问题记录
2020年8月31日
我在测试的过程中,遇到了一个本地提交无法推送到远程仓库的问题,报错提示如下:
Push master to origin/master was rejected by remote
很明显,这是远程服务器拒绝了本地的推送请求,原因只有一个,那就是权限不够。
我解决这个问题的方法是,先获取到本地电脑的ssh公钥,然后将该公钥添加到服务器用户(由于我没有设置别的用户,因此就是添加到root用户下)的authorized_keys
文件下。
该文件通常位于~/.ssh
目录下。从文件名就可以看出,该文件的作用就是记录那些被授权的主机的公钥信息的。
5.2 关于非root用户创建的裸仓库可以直接被push的问题记录
2020年9月1日
步骤:
- 如果我另外创建了一个非root用户,比如说用户名是
git
; - 然后我用
git
用户初始化了一个裸仓库,目录为/srv/git/project.git
; - 在我的工作电脑上,输入
git clone git@123.456.78.9:/srv/git/project.git
后输入该用户的密码后就可以将仓库克隆到本地,也可以成功提交和推送。 - 检查
git
用户的~/.ssh/authorized_keys
,发现为空。
为什么直接就可以推送成功而没有出现5.1中的问题呢?我回想了一遍整个过程,问题可能出在第1步和第2步中间。
前面已经提到,裸仓库的创建实际上是先创建一个目录,然后在该目录下执行git命令即可;我在创建目录的时候用的git
用户,而为了能够让git
用户具有完整的权限,我的操作是:用root用户将/srv
目录设置为所有用户可读写,即执行了命令chmod a+rw -R /srv
。我怀疑是因此而导致我的工作电脑也具有了对该仓库(目录)的读写权限了。
明天再验证吧。