git搭建代码服务器

在一台机器上开发一套代码,使用一套代码就可以了。且使用git来维护很容易。
但是由于多人共同开发一套代码,就需要使用代码服务器来维护代码了。

代码服务器拓扑:在这里插入图片描述
假设代码开发初期,在计算机A上开发,代码目录为developer1,后面若需要另一个人公共开发,就需要搭建代码服务器。为了方便起见,在计算机A上直接新创建project-bare目录,作为代码服务器。在开发过程中,计算机A上developer1和计算器B上的developer2都从project-bare,push/pull最新的代码,就可以共同发开一台代码。

实现上述方案如下:
假设计算机A上,仅有developer1目录(/home/developer1/developer1),且代码为最新的。
计算机A(192.168.1.1)上的设置过程:
(1)在目录/home/developer1下创建git代码仓库project-bare。

# cd /home/developer1
# mkdir project-bare
# cd project-bare
# git clone --bare /home/developer1/developer1 /home/developer1/project-bare/project-bare.git

(2)返回到原代码目录/home/developer1/developer1,把/home/developer1/project-bare添加为remote

# cd /home/developer1/developer1
# git remote add origin /home/developer1/project-bare/project-bare.git
# git branch --set-upstream-to=origin/master master

计算机B(192.168.1.2)上设置过程:
(1)登录计算机B

(2)通过ssh来连接机器A,并clone代码分支。

# eg:git clone ssh://<username>@<ip>:<port>:/code-path/project.git ./target-directory
# git clone ssh://[email protected]:/home/developer1/project-bare/project-bare.git ./developer2

(3)clone分支成功后,在机器B上做修改,然后commit,并push;在机器A上就可以pull到了。反之在机器A的/home/developer1/developer1目录做修改,commit,并push后,在机器B上也能pull下来了。

//在提交本地修改时,执行git add和git commit操作后
# git push origin master
//在添加新的代码前,先同步一下代码
# git pull origin master

Note:
若要再添加一台新的开发机,重复第2步clone分支操作即可。

为什么要新创建project-bare,而不直接使用原代码目录developer1作为代码服务器
如果B直接clone A上的developer1仓库,并且将其添加为remote,那么在执行git push操作的时候是会报错的,因为此时B不知道A是否也在对工作副本进行了修改,直接push过去可能造成working copy的冲突,而创建的project-bare仓库只记录仓库信息不保存working copy,作为一个中央仓库使用。

可能存在的问题:
(1)在执行"git push origin master"操作时,发生"error: refusing to update checked out branch: refs/heads/master".

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

原因:这是由于git默认拒绝了push操作,需要进行设置,修改.git/config文件。

解决办法:
修改.git/config文件,在该文件后面添加如下代码:

[receive]
denyCurrentBranch = ignore

新增:
git有工作目录和bare目录之分
如何把一个git工作目录修改成bare目录?(由一个git工作目录,再clone一个bare目录,见上面的步骤)
步骤如下:暂定当前的工作的目录为/home/user1/dev_network
(1) 进入工作目录dev_network,把当前目录中的.git目录移到上一级目录(/home/user1)中。

# cd dev_network/
# mv .git ../

(2) 删除当前目录(/home/user1/dev_network)中的所有文件(包含隐藏文件)。

# rm -rf ./*

(3) 把上一级目录(/home/user1)中的.git目录中的所有文件移过来(/home/user1/dev_network)。

# mv ../.git/* ./

(4) 执行git配置操作

# git config --bool core.bare true

至此,/home/user1/dev_network目录就有一个git工作目录变成了一个git bare目录(简称:裸目录)。可以在本机或其他主机上clone开发分支了。

发布了207 篇原创文章 · 获赞 77 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/daa20/article/details/104166268