Git在本地机器就可以进行版本控管的功能, 但Git更强大之处就是分布式。像传统的集中式版本控管工具一样,在远端服务器上安装一个Git版本库作为中央版本库(也称为远端库,或是服务端),本地库的改动可以集中的汇总到中央库。即保证了代码的稳定安全,也实现了协同开发。中央库的一般基于Linux系统搭建。
中央库
如果项目比较多,或者权限设置较复杂的状况下, 一般会借助一些管理工具对中央库进行管理。为了管理方便,大部分的管理工具基于Web进行管理。像:
Gitblit, http://www.gitblit.com/ . 开源,使用Java开发的。一般是小型的团队使用。
bitbucket,原名Stash, https://bitbucket.org/. 有企业版,也有免费版(5人以下免费,待考)。
如果缺少服务器资源,或者觉得自己搭建中央服务器比较麻烦的话, 现在网络上有很多在线的中央库,注册一个帐号就可以了, bitbucket就有提供在线版。另外比较知名的还有Github, Gitlab。Gttlab也有提供自行安装的软件。
裸仓库
git init 会把当前目录进行版本管理, 会产生一个.git目录。并会把当前目录的文件作为工作区文件。
git init –bare 创建的是一个空目录, 也会产生一个.git目录,但是没有工作用的文件。一般用作服务端库的初始化。目录名以.git结尾。
也叫裸仓库。
git clone从别的仓库克隆,包含了工作目录。
除了git clone之外,如果是一个已经初始化的可以, 也可以通过git remote命令和其他的远程仓库建立联系。进行代码的检出和Push.
使用 git init –bare创建的库,不会建立master的Branch。
初次clone一个裸仓库的话, 使用git branch是找不到任何branch的(远程和本地的都没有,包括master).
如果创建master的话, 会报Not a valid object name: ‘master’的错误。
D:\devworkspace\gitworkspace\mygit\project1>git branch master
fatal: Not a valid object name: ‘master’.
这种状况可以完全不用处理, 只需要添加一个文件, 执行 add 之后,就可以看到本地库master的branch了。
git push之后使用 git branch -a , 就可以看到本地库和远程库的 master branch了。
D:\devworkspace\gitworkspace\mygit\project1>git branch -a
* master
remotes/origin/master
备注: 目前看起来无法查看本地库的branch和远程库的哪一只branch的对应关系。 其实取的时候和推送的时候知道远端的branch的名称,看上去也可以不用这个功能, 如果用的话,当然是最好。