修改程序都是在本地电脑上,运行程序则需要在服务器上,想在本地电脑和服务器做同步
1. 环境
- 本地电脑:ubuntu16.04,局域网, 用户名jankyee
- 服务器:ubuntu16.04,公网,没有root权限,用户名为jankyee
- git版本:2.7.4
git服务器搭建在服务器上(有公网IP)
2. 服务器配置
网上流传的步骤一般是新建一个git用户[1],但是由于服务器上没有root权限,因此直接使用用户名jankyee。而与服务器的连接使用ssh
- 在服务器的
/home/jankyee
目录下新建一个名为lab_server.git
的仓库:git --bare init lab_server.git
git init
和git --bare init
的区别:用git init
初始化的服务器仓库,服务器用户可以直接执行所有git操作来修改仓库,当有其他用户push上来时可能会冲突,导致版本混乱。而git --bare init
则产生一个“裸”仓库,意思就是这个仓库只保存git提交记录的版本信息,而不允许服务器用户直接在上面进行进行git操作,否则会报错This operation must be run in a work tree
。一般来说,服务器仓库一般初始化为裸仓库较好。
- ssh配置,在
/home/jankyee/.ssh
中新建文件authorized_keys
, 将客户端的公钥填入文件中,一行一个(后面会详细讲) - todo
3. 客户端(本地电脑)配置
生成公钥-私钥对
ssh-keygen -t rsa -f ~/.ssh/id_rsa.lab_server -C "jankyee@jankyee-pc.com"
-C
参数是用来标识身份的,是放在生成的公钥的末尾的。我们知道在生成github的key的时候[2]这里填的是自己的github邮箱账号,这里我用了一个假的邮箱域名,其实随便填都可以。如果不填的话在公钥末尾就是用户名+主机名,我这里是jankyee@jankyee-pc
。这个标识代表的git用户的身份,git仓库的版本信息中会有记录。有时需要配置git config user.email
,那么这里的这个user.email
就是这个标识,其实不一定非要是“邮箱”-f
用来指定生成的位置,以及文件名。
注意区分开github所要用的key,我的github的key的生成方式是
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱账号"
- 为了使两者同时可以使用,还要配置一下。首先新增配置文件:
touch ~/.ssh/config
之后修改权限
chmod 600 ~/.ssh/config
然后修改config文件内容为
- 为了使两者同时可以使用,还要配置一下。首先新增配置文件:
通过
ssh-add -l
命令可以看到当前的key的情况,也可以添加,删除等,具体使用参照help配置客户端免密码登录服务器,将生成的
id_rsa.lab_server.pub
公钥填写到服务器的~/.ssh/authorized_keys
中- 首先将公钥文件上传到服务器上
scp ~/.ssh.id_rsa.lab_server.pub labserver:/home/jankyee/.ssh
.
注意这里写的是简写lab_server
, 如果是全写的话
scp ~/.ssh.id_rsa.lab_server.pub jankyee@ip:port/home/jankyee/.ssh
port后面是没有冒号的 - 登录服务器(这是仍需要密码)
ssh lab_server
cd ~/.ssh
cat id_rsa.lab_server >> authorized_keys
(注意:使用>
会直接覆盖,使用>>
则是在后面追加)
再次登录时可发现已经不需要密码了。另外在做git操作的时候同样也不需要密码了
如果没有配置上面的步骤的话,客户端在git commit
的时候会提示需要配置git config --global user.email
等
- 首先将公钥文件上传到服务器上
clone服务器的版本库。选择合适的目录
git clone lab_server:/home/jankyee/lab_server.git
尝试修改提交(master分支默认为当前分支)
cd lab_server
touch test_git
git add test_git
git commit -m "test git"
git push origin master
4. 服务器上查看文件内容
裸仓库是看不到文件内容的,只能看到文件的版本信息,而如果需要在服务器上查看文件的话(也就说最开始说到的同步),其实只用在服务器的工作目录下clone下就行了,相当于服务器上同时存在git服务器和git客户端
一种方法是直接使用本地路径,首先确定合适的工作目录
git clone 仓库的本地路径
在git commit
的时候提示需要配置email,前面也已经说过,填上主机名或者随便即可,只要能确定自己身份就行。一种方式是把git服务器和git客户端看成两个独立的网络实体,只不过这时git服务器的地址变成了localhost。同样地,按照客户端的步骤,生成公钥-私钥对,同样地,讲公钥追加到
authorized_keys
文件后面,其余配置和前面说的客户端配置一样。
Refer:
[1] http://www.jianshu.com/p/10b6a1ee7f64
[2] http://blog.csdn.net/hustpzb/article/details/8230454/