这几天不少”果仁”(坚果用户)通过各种渠道咨询如何通过坚果云同步和备份代码. 目前采用的方式通常是将代码直接放在坚果云中, 每次修改自动同步, 这样做有几个问题:
- 坚果云的版本历史是自动保存的, 不能添加版本信息. 对于代码而言, 不方便找回和比对历史代码;
- 专业的代码管理工具(Git/Hg/SVN)能够很容易查看用户对所有代码进行的每次修改, 易于分析bug的来源, 而坚果云不能提供这样的功能
- 如果将eclipse等IDE的workspace直接放于坚果云中, 假如因为同步不及时造成冲突, 因为文件众多而且涉及到很多IDE相关文件, 可能导致IDE无法正常打开.
- 编译, 重构等自动化工作引发的同步, 容易导致大量的带宽占用
幸运的是, 我们推荐用如下的方法利用坚果云同步代码, 可以完全保留代码管理工具的长处, 同时利用坚果云提供的自动同步和备份功能.
假设你用的是Git, 当前的开发目录叫”~/projects”, 而坚果云路径为”~/Nutstore”, 进行如下操作:
- ~/projects $>git init (注释: 初始化git repository)
- ~/projects $> git add .
- ~/projects $> git commit -m “first commit”
- ~/projects $> mkdir -p ~/Nutstore/git/project (注释: 在坚果云中创建bare git repository)
- ~/projects $> cd ~/Nutstore/git/project
- ~/Nutstore/git/project $> git init –bare
- ~/Nutstore/git/project $> cd ~/project (注释: push代码到坚果云中)
- ~/project $> git remote add orig ~/Nutstore/git/project
- ~/project $> git push orig master
这样在所有电脑上都可以正常的进行git pull & git push, 以后每次修改代码只需commit, 然后将代码push到~/Nutstore/git/project即可享受到git+坚果云的所有好处. 如下:
- ~/project $> git push orig master
假如你用的hg/Mercurial, 按照如下流程操作:
- ~/projects $> hg init (注释: 初始化hg repository)
- ~/projects $> hg add
- ~/projects $> hg commit -m “first commit”
- ~/projects $> mkdir -p ~/Nutstore/hg/project (注释: 在坚果云中创建bare hg repository)
- ~/projects $> cd ~/Nutstore/hg/project
- ~/Nutstore/hg/project $> hg init
- ~/Nutstore/hg/project $> cd ~/project (注释: push代码到坚果云中)
- ~/project $> echo “[paths]\ndefault = ~/Nutstore/hg/project\n” > .hg/hgrc
- ~/project $> hg push
这样在所有电脑上都可以正常进行 hg push & hg pull, 以后每次修改代码只需commit, 然后将代码push到~/Nutstore/hg/project即可享受到hg+坚果云的所有好处. 如下:
备注:
如果你想了解git和hg的用法, 下面是很好的入门材料.
git: http://book.git-scm.com/
hg: http://hginit.com/
git一直弄不到耶- -
ubuntu下git一直报does not appear to be a git repository的错误,纠结中
这样做能够避免冲突?万一两次 push 间隔时间非常短呢,或者多个人同时 push 呢?
这种方案确实比直接同步要好很多,可是一旦发生同步冲突处理起来也要麻烦很多。
同一台电脑, 两次push间隔时间很短是不会造成冲突的.
只要不在两台电脑上同时push, 应该不会有冲突. 假如参与代码协同的人数很少, 可能造成冲突的时间窗口很小. 即使不幸出现冲突. 但是冲突的文件夹处于坚果铺子中, 而用户的工作目录不会有冲突, 只需删除冲突的代码文件夹, 然后将用户工作目录重新push就可以了.
只需删除冲突的代码文件夹?这个“只需”之前,最重要的一步是“聊”!出现冲突没有不问清楚上来就删文件的……所以Sharepoint这类协同办公软件的文件夹窗口都自带聊天框。
很强大!
别尝试了。本来就不是用来干这事的,多人同时开发这种需求还是老老实实用版本控制工具吧。