了解知识

 之前通过gerrit工具,建立过挺多个git项目,并可以熟练的在本地checkout 出来各种分支开发。

这次直接给了一个已有的项目的代码, 这些代码之前并没有在任何的版本控制库上, 要迁移到git上来管理,简单的事情却也遇到一些困难。如果是从svn神码的转到git就好了阿,有成熟的工具可以用呢……

=============================================================================
实际工作是这样的
1, 在服务器想要管理这个项目的位置建立一个以分享为目的的纯的仓储
比如:
mkdir ProjectA.git
cd ProjectA.git
git init --bare

这里文件夹用.git结尾是为了告诉阅读者知道这个目录是用来作为git仓储。
init时候加的--bare参数 必不可少, 这也是我之前遇到的主要的困难。
简单来说,--bare参数加上之后会建立一个以分享/分布式开发为目的的纯的服务器仓储,
而git init 或者 git clone 都是建立/拷贝建立 一个本地的开发工作目录。
可以搜索这个指令或者参考这篇文章来了解更详细的信息 http://doophp.sinaapp.com/archives/other/1144.html
如果像我今天一样在创建一个服务器仓储时忘记加上 --bare 参数, 就会报出类似于如下错误:
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'.


2 ,
服务器已经提供公共仓储之后,本地可以方便的添砖加瓦。
比如1中, 服务器地址是serverAddress, 目录地址是~/some/safe/place/
那么在本地代码已经存在的工作目录 workingDir 下进行如下操作:
cd workingDir
git init (如果之前不在任何git库里)
git remote add origin ssh://user@serverAddress/~/some/safe/place/ProjectA.git (把远程分支命名叫origin比较符合一般的习惯,当然也可以叫remoteServer之类的。)
fit fetch
git checkout -b workingBranch origin/master (如果按步骤来新建的服务器仓储,那就默认用master分支吧: origin/master)
vi .gitignore (自行配置好.gitignore文件)
git add . (之前说了是已经有项目和代码,需要加入到git管理 , 所以把相应的代码都加进去。 )
git commit -m "message for commit "
git push (走你, 存到服务器了 ,觉得太粗暴的可以用 git push origin master)

至此在服务器本地的代码已经被服务器接受了。
你的好伙伴好机油们也可以在世界的任何一个小角落里用git clone ssh://user@serverAddress/~/some/safe/place/ProjectA.git 来共同搞这些代码。

标签: git
扩展知识