2011-05-04 87 views
1

我目前正在从一个项目上运行两台不同的计算机 - 运行Linux的笔记本电脑和运行Win7的桌面。我正在使用带有gitolite的ubuntu服务器来托管我的回购。发现git中的本地回购和远程回购之间的区别

我试图写一个快速脚本,将做两两件事:如果说有什么对当地回购改变,自上次推

  1. 检查。如果是这样,它应该提交更改,将提交按钮推送到远程回购站012。我不知道这是如何工作的,但我不希望这个提交覆盖我没有在本地更改过的文件中的更改(即:它们可能已在另一台计算机上被更改并被推送)

  2. 之后,它应该检查远程仓库是否有自上次抽取后发生更改的文件(请参阅1a。)。如果是这样,将这些更改拉入本地回购。

该脚本的目的是保持两台计算机彼此同步,而不必每次都手动完成所有这些git工作。我希望定期进行这种运行(每半小时一次),所以如果可能的话,我不希望它占用大量资源。

我不需要为我编写的整个脚本(除非它只是一对线) - 只需指向我将需要的命令即可。

回答

1

比较器的输出:

git ls-remote <remote> 
git show-ref 

虽然一般是什么做的是获取(不拉),遥控器和远程分支机构与当地分行。如果您有非快速合并,则无法真正实现自动化,因为在再次推送之前需要手动干预合并。

+0

因此,我可以使用git show-ref来检查我的本地回购是否与远程回购(步骤2)相匹配。第1步的任何想法?另外,有没有办法强制我的合并覆盖那些非快进的东西?像git push -f? – jwegner 2011-05-05 02:49:27

+0

如果您执行git push -f,您可能会失去(永久)由推入回购的其他人所做的更改。如果发生这种情况,另一个人也将无法撤销覆盖的回购,而没有发生重大冲突。我想你想使用'-s ours'选项来拉(或合并),这个选项会将树合并到原始状态,但它不会把对方的资源库搞砸了(如果你的话他们的提交仍然存在需要恢复它们)。 – kanaka 2011-05-05 14:41:22