1. GitHub中以svn方式下载代码之后,commit时,可能报错“svn mkcol not allowed”;
2. 原因可能是gitHub使用了更严格的版本管理机制,不能直接checkout就可以commit,使用下面的步骤后OK;下面的步骤,参考了:http://www.oschina.net/translate/collaborating-on-github-with-subversion?cmp 其实这里是对官网的翻译;
3. 用到的工具,Svn Windows下的命令行工具,可以到这里选择下载 http://subversion.apache.org/packages.html,我选的是SlikSVN:
这里的命令行工具,都是有源码的,有兴趣的可以到这里下载研究:http://subversion.apache.org/download/#recommended-release
好消息是现在你可以通过 Git 和 Subversion (SVN) 的客户端来访问 Github 的资料库。
这篇文章大概介绍了如何利用 Subversion 客户端来更好的使用 GitHub 流程。
Github 流程中每次功能提交和bug修复都会通过以下的步骤来完成:
- 从最新的 master 分支中创建一个 topic 分支
- 在你准备好要合并时在 topic 分支中提交
- 通过 Pull Request 将 topic 分支拉到 master 分支,讨论变更,更多提交等等,知道团队准备好合并
- 合并 Pull Request 然后发布
开始
首先要做的就是 svn checkout。Git 的 clone 让工作目录和资源库文件分离开来,工作目录在一个时间只有一个分支。而 svn checkout 是不同的,它在工作目录中混有资源库数据,因此你 checkout 的每个分支、标签都有相应的工作目录。资源库包含大量的分支和标签,如果把所有数据都 checkout 出来非常费带宽,你应该只检出某部分数据。
GitHub 通过 HTTP 协议来支持 git 和 svn 的客户端,你可以通过 HTTP clone URL 来浏览资源库中的文件。
现在可以准备 checkout 了:
首先我们 checkout 一个资源库,并不下载任何文件:
1 | > svn co --depth empty https://github.com/widgetmakers/gizmo |
2 | Checked out revision 1. |
然后获取 trunk 分支,svn 中的 trunk 分支相当于 git 里的 HEAD 分支(通常是 master)
获取 branches 目录的空 checkout:
1 | > svn up --depth empty branches |
进入 Git 流程
首先是创建一个 topic 分支,在你的 svn 客户端中,确保 master 是当前更新的 trunk,然后使用 svn copy 来创建分支:
3 | > svn copy trunk branches/more_awesome |
4 | A branches/more_awesome |
5 | > svn commit -m 'Added more_awesome topic branch' |
6 | Adding branches/more_awesome |
然后你可以通过 web 界面或者 git 客户端看到一个新的分支:
1 | cd 到相应分支的目录 比如 cd branches/more_awesome svn add 你要上传的目录或文件 |
然后提交,就像你平时使用 svn 一样:编辑文件,然后 svn commit 来提交变化。OK了;
3 | > svn commit -m 'Test coverage for problems' |
4 | Adding more_awesome/ test |
5 | Adding more_awesome/ test /gizmo_test.rb |
6 | Transmitting file data . |