如何检查本地git存储库是否是最新的

如何检查本地git存储库是否是最新的,git,Git,基本上,我正在编写一个crontab任务,每1分钟检查一次我的远程git存储库。如果有更改,它会将它们拉入(本地repo),遍历每个提交,并在每个提交上运行grunt selenium任务 我有点困惑的部分是如何找出远程git存储库是否有新内容,我需要拉 据我所知,两个命令可能会有所帮助。对不起,如果我错了。我同意 Git有两个从远程存储库更新自身的命令。git fetch将使您与另一个repo同步,提取您在本地没有的任何数据,并为您提供书签,指向您同步时远程设备上的每个分支所在的位置。这些被称

基本上,我正在编写一个crontab任务,每1分钟检查一次我的远程git存储库。如果有更改,它会将它们拉入(本地repo),遍历每个提交,并在每个提交上运行grunt selenium任务


我有点困惑的部分是如何找出远程git存储库是否有新内容,我需要拉

据我所知,两个命令可能会有所帮助。对不起,如果我错了。我同意

Git有两个从远程存储库更新自身的命令。git fetch将使您与另一个repo同步,提取您在本地没有的任何数据,并为您提供书签,指向您同步时远程设备上的每个分支所在的位置。这些被称为“远程分支”,与本地分支相同,只是Git不允许您签出它们-但是,您可以从它们合并,将它们区分到其他分支,在它们上运行历史日志,等等。同步后,您可以在本地执行所有这些操作

从远程服务器获取新数据的第二个命令是gitpull。这个命令基本上会立即运行git fetch,然后对远程上的分支进行git合并,该分支由您当前所在的分支跟踪。单独运行fetch和merge命令所涉及的魔法和问题更少,但是如果您喜欢pull的想法

假设您已经设置了远程all,并且希望获取更新,那么首先运行git fetch[alias]让git获取它所拥有的、您没有的所有数据,然后运行git merge[alias]/[branch]将您在服务器上看到的任何新内容合并到您当前的分支中(就像同时有其他人推送一样)。因此,如果您正在与其他几个人一起进行一个Hello World项目,并且希望引入自上次连接以来推动的任何更改,我们将执行以下操作:

$ git fetch github
remote: Counting objects: 4006, done.
remote: Compressing objects: 100% (1322/1322), done.
remote: Total 2783 (delta 1526), reused 2587 (delta 1387)
Receiving objects: 100% (2783/2783), 1.23 MiB | 10 KiB/s, done.
Resolving deltas: 100% (1526/1526), completed with 387 local objects.
From github.com:schacon/hw
   8e29b09..c7c5a10  master     -> github/master
   0709fdc..d4ccf73  c-langs    -> github/c-langs
   6684f82..ae06d2b  java       -> github/java
 * [new branch]      ada        -> github/ada
 * [new branch]      lisp       -> github/lisp
在这里我们可以看到,自从上次与这个远程服务器同步以来,已经添加或更新了五个分支。“ada”和“lisp”分支是新的,其中“master”、“c-langs”和“java”分支已经更新。在我们的示例中,其他开发人员正在将建议的更新推送到远程分支以供审查,然后再将它们合并到“master”中

您可以看到Git所做的映射。远程存储库上的“主”分支在本地成为名为“github/master”的分支。这样,您就可以通过运行git merge github/master将远程服务器上的“master”分支合并到本地“master”分支。或者,您可以通过运行git log github/master^master来查看该分支上的新提交。如果您的遥控器名为“origin”,则它将改为origin/master。几乎任何使用本地分支运行的命令也可以使用远程分支

如果您有多个远程存储库,您可以通过运行
git fetch[alias]
从特定的存储库中获取,也可以通过运行
git fetch--all来告诉git与您的所有远程存储库同步。

也 git status命令

git status命令显示工作目录和临时区域的状态。它可以让您看到哪些更改已经被转移,哪些没有转移,哪些文件没有被Git跟踪。状态输出不会显示有关已提交项目历史记录的任何信息。为此,您需要使用git日志

git status

列出已暂存、未暂存和未跟踪的文件。

您可以使用
git ls remote
查找:

git ls-remote origin master
此命令将获取主分支的最新sha-1 id,您可以指定任意数量的分支,也可以不指定任何分支来获取所有分支。您可以使用它与本地分支进行比较

但是,获取所有更改可能更有效,这样您就不必重复执行相同的网络操作两次:

git fetch origin
这样,您将在“源代码/主代码”中获得更新,您可以与“主代码”进行比较,查看是否有更新。这不会合并或重新设置基址,因此一旦检测到有更新,您就可以执行
git pull
git merge
git rebase
,无论您想做什么

git fetch
git log ..origin/master --oneline | wc -l
它输出拉取时将应用的修订(提交)数量


如果大于0,则表示有新内容。

只是一个一般性的评论:与其每分钟轮询一次(听起来效率非常低),不如(如果可能的话)直接在远程回购中使用它?这是一个在无头服务器上运行的crontab任务。它能应付。但是我会考虑在以后的阶段添加它。我确信实际上每台机器都能处理它,只是当您可以使用HooGooSt来检查服务器上最后一次提交的日期与本地上一次提交的日期相比,就没有必要了。只要你不做任何疯狂的事情,比如用强制推的方式改变历史记录,这应该是可行的。为什么不使用真正的CI服务器,例如?