$ sudo apt-get install git-core
Gitosis是一个工具程序,可以帮助我们进行Git仓库的访问控制和远程管理。
$ sudo apt-get install python-setuptools
$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/res0nat0r/gitosis.git
$ cd gitosis
$ sudo python setup.py install
没有密码。这个帐号是给Gitosis程序使用的。
$ sudo adduser \
--system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git
客户端安装ssh,生成ssh密钥
$ sudo apt-get install openssh-client
$ ssh-keygen
将公钥文件复制到服务端。
$ scp /home/xx/.ssh/id_rsa.pub xx@server:/home/xx
$ sudo -H -u git gitosis-init < /home/xx/id_rsa.pub
得到下面的结果:
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
意思是服务器上已经成功创建了仓库目录,路径是/home/git/repositories,并且里面还创建了一个管理员仓库,叫gitosis-admin。
修改服务器上一个文件的权限:
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
从服务器上clone出gitosis-admin仓库:
$ /home/chenshu/my_git
$ cd ~/my_git
$ git clone git@server:gitosis-admin.git
结果如下:
Cloning into gitosis-admin...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 5 (delta 1)
Receiving objects: 100% (5/5), done.
Resolving deltas: 100% (1/1), done.
通过修改gitosis-admin/gitosis.conf文件来远程管理服务器上的仓库:
[gitosis]
[group gitosis-admin]
members = xx@ubuntu
writable = mitosis-admin
把用户的公钥添加到gitosis-admin/keydir中,在gitosis-admin/gitosis.conf文件中member项加入用户名,用户名与文件.pub之前的名称一致
[gitosis]
[group gitosis-admin]
members = xx@ubuntu zzz
writable = mitosis-admin
在gitoosis-admin目录下,提交设置到服务器:
$ git add .
$ git commit -am "add a new user"
$ git push
在gitosis-admin/gitosis.conf文件中添加工程名以及用户
[gitosis]
[group gitosis-admin]
members = xx@ubuntu zzz
writable = mitosis-admin
[group testProject]
members = xx@ubuntu zzz
writable = testProject
提交到服务器。
建立工程目录并提交到服务器:
$ mkdir testProject
$ cd testProject/
$ git init
$ git add .
$ git remote add origin git@localhost:testProject.git
$ git commit -am "new project init"
$ git push origin master
服务器完成。
$ git clone git@server:testProject.git
进入获取的工程目录,添加文件,上传服务器
$ cd testProject
$ touch 1.c
$ git add .
$ git commit -am "add new file 1.c"
$ git push
如只上传单个文件 在add后接该文件名
...
$ git add 1.c
...
$ git pull origin master
可以获取服务器master分支的所有文件。
$ git branch dev
$ git branch
dev
* master
<h2>asdashdkh2>
当前分支会标*
号
$ git checkout dev
Switched to branch 'dev'
git checkout命令加上-b参数表示创建并切换分支:
$ git checkout -b dev
Switched to a new branch 'dev'
然后,用git branch命令查看当前分支:
$ git branch
* dev
master
就可以在dev分支上正常提交。
$ git add readme.txt
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)
现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到当前分支。合并后的文件内容,和dev分支的最新提交是完全一样的。
合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
删除后,查看branch,就只剩下master分支了:
$ git branch
* master