搭建Git Server
cd my_project
git init
git add .
git commit -m 'first commit'
cd ..
git clone --bare my_project my_project.git
这样就可以通过SSH去clone my_project.git
这个仓库了。
不过这样还有很多问题。首先是权限,先要创建一个group:
groupadd git
把相关的账号加入到这个group:
gpasswd -a use1 git
还要把仓库的权限设为git组可读写:
chown -R root:git .
chmod -R 771 .
另外,要把仓库设置成shared,我之前写过一篇文章解决这个问题,在这里。
书上有个写法:
git init --bare --shared
不过我没试过,下次再建server时可以试试。
配合远端server使用Git
本地使用基本没有问题,按照一般的教程来就可以。关于远端的使用,好像没有发现系统性讲解的教程,只能在使用中发现问题、解决问题。
分支关联
如果本地还没有远端的分支,可以这样:
git checkout --track origin/my_branch
会在本地创建一个分支my_branch
并与远端的origin/my_branch
建立关联。
如果本地已经有了my_branch
,并且想和远端的建立关联,则要这样:
git branch --set-upstream my_branch origin/my_branch
要确认分支是否关联上了,可以打开.git/config
,看有没有下面这些:
[branch "my_branch"]
remote = origin
merge = refs/heads/my_branch
分支关联上以后,pull
时就不需要指定分支了,直接在当前分支下git pull
就可以更新当前分支。其它的用处还不知道,没敢试。
fetch
关于fetch我还不是十分理解。git fetch origin my_branch
是不能把这个分支最新的代码fetch下来的。只能用git fetch origin
,把所有的分支都fetch下来,然后到相关的分支去merge
。
git fetch origin
git merge origin/my_branch
push
遇到过一个问题,要回滚远端的代码。先reset到需要回滚的点:
git reset --hard <commit_id>
然后修改代码,改完后,push时要加上--force
git push origin my_branch --force
否则会提示什么不是fast-forward,不让提交。也不知道这么搞会不会有什么问题。