使用U盘和git在多个电脑上共享工作

译注:因为需要频繁的在各电脑上切换,例如在实验室电脑和自己的电脑上工作,工作代码又需要在同版本控制之下。要满足这样的需求,可以使用网上免费的Git托管服务器,例如 GitHub ,但是免费的托管项目,又需要开源。如果有一个可以可以移动的Git服务器,问题就解决了,本文就是一个把Git服务器版本库放到U盘里面的解决方案,当然你要保证你的U盘别丢了。(第一次翻译别人的博客,翻译不正确的地方请指出。)


以下是原文翻译,原文可以在这里找到: http://timwise.blogspot.com/2008/05/sharing-work-between-computers-with-usb.html .

===
因为我在网上没有找到正好符合这个目的(使用U盘和git在多个电脑上共享工作)的解决方案,所以我做了如下的方案。

此方法可以同远程的svn服务器同时使用,如果没有的话,也可以适用。

首先,在第一个电脑上,使用git-svn clone (或者 克隆一个git库,或者新建一个工作目录),从远程代码库获取你的工作的拷贝到本地:
mkdir ~/project.git
cd ~/project.git
git-svn clone svn://project-server/trunk
git repack #for good measure
然后插上U盘,我们假设U盘是vfat/fat32/fat16格式的,并且挂载的路径为/media/flash.在U盘上创建一个空版本库,我们创建一个bare库,因为我们并不需要在此库保存工作拷贝( 译注: 也就是说是服务器版本库,没有工作目录)。
mkdir /media/flash/project.git
git --bare init /media/flash/project.git
然后,把U盘上的git版本库作为远程分支加到本地的git版本库中。我这里使用"flash"作为远程版分支的名字,你可以使用任何你喜欢的名字:
git remote add flash /media/flash/project.git
到这里如果你立刻push,可能会出现错误。因为fat文件系统格式在文件上并不支持可执行标记,所以所有的hook都是自动激活状态的。因为我将来并不打算使用这些hook,所以我直接删除掉所有的hook,这样做可能会产生错误,但是对我来说并没有出错。所以使用如下命令删除所有的hook:
rm /media/flash/project.git/hooks/*
然后push你的当前工作目录内容到U盘:
git push flash
此命令会复制你所有提交了的工作到U盘,即使你还没有使用"git-svn dcommit"命令push到远程的svn服务器。你还可以指定提交分支:
git push flash mybranch
现在,假设你转换到另外一个电脑上工作,插入上面的那个U盘,我们这里假设路径和设备和上面的那台电脑一样。这里做和上面完全相同的操作来从svn上克隆版本库:
mkdir ~/project.git
cd ~/project.git
git-svn clone svn://project-server/trunk
git repack #for good measure
然后添加U盘的库作为远程库,并且pull下来所有的改变:
git remote add flash /media/flash/project.git
git pull flash master
git pull flash mybranch #if you like
当你在任意一台电脑上提交了一些改变到git,或者从svn上pull了最新的版本,都可以使用如下命令更新U盘的版本库:
git push flash
然后你可以在其他电脑上,从U盘里面pull最新的版本:
git pull flash master
如果没有在push到svn之前,先向U盘中push改变,事情就非常简单。如果你向U盘中push了一些改变,然后再向SVN服务器中push,你将需最做更多一些的工作。这是因为当你运行“git svn dcommit”来push你最新的git提交日志svn服务器的时候,删除了本地的提交日志,然后从服务器上获取回来这些日志。 这意味着git将不认识你本地的改变,因为本地改变与U盘中是一样的,而有不同的提交信息和SHA1值。但你试图push到U盘的时候,将会提示 "! [rejected] master -> master (non-fast forward)",因为老版本的提交信息还在那里。 为了解决这个问题,你需要扔掉U盘上匹配的那些改变。 如下面所示使用git reset命令, 其中HEAD~1应该是你需要扔掉的提交的个数(例如,HEAD~3将扔掉U盘上你最近的3个提交):
cd /media/flash/project.git
git --bare log #to see how many changes don't have svn information
git --bare reset HEAD~1
然后你就可以正常提交了:
cd ~/project.git
git push flash
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值