如何使用git repo使文件夹保持最新状态?

时间:2014-06-20 16:42:25

标签: git shell github automation

这是一个shell脚本,它将定期检查github以获取最新代码,并在我本地已经拥有的内容和拉出的内容之间存在任何差异时下载,编译和运行它。

我知道我总是可以将它克隆到一个新目录,然后检查更改,然后从那里开始,但这看起来非常浪费,因为git应该已经有了检查文件之间差异并仅更新文件的逻辑。

为了使问题复杂化,“本地”版本可能在某些时候是“最新”版本,在这种情况下,我想丢弃“新”更改并从“稳定”存储库中提取

我目前有这个:

status=`cd $gitDir && git pull`
if [ "$status" != "Already up-to-date." ];
then
cd $gitDir  && git fetch origin
cd $gitDir  && git reset --hard origin/master

但是当“本地”是“更新”时它会失败 - 建议?

更新:我已经查看了干净的选项,但是它摆脱了.gitignore中排除的文件 - 我想要一个解决方案,不管那些,但丢弃对源文件的任何更改并从github中提取最新信息。

更新#2: 我认为这就是我的需要:

git fetch --all
git reset --hard origin/master

但是我需要做一些测试,一些确认它确实是我正在寻找的将是很好的

更新#3:似乎要么

git reset --hard origin/master
git reset --hard HEAD

可以覆盖本地文件,但现在我怎么知道两者是不同的(查看git diff ..)

1 个答案:

答案 0 :(得分:2)

首先,自git 1。8。5(2013年11月),you can use the -C option for git,如" git --git-dir not working as expected"。

status=`git -C $gitDir pull`
if [ "$status" != "Already up-to-date." ];
then
git -C $gitDir fetch origin
git -C $gitDir reset --hard origin/master

其次,您可以在您的客户端上听取来自JSON payload GitHub webhook push to that GitHub repo的{{3}}。{ 这样,除非确实需要,否则你不必执行脚本。