这是一个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 ..)
答案 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}}。{ 这样,除非确实需要,否则你不必执行脚本。