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

时间:2013-10-11 11:18:07

标签: git

基本上我正在编写一个crontab任务,每1分钟检查一次我的远程git存储库。如果有变化,它会将它们拉到(到本地仓库),完成每次提交,并在每次提交时运行一个grunt selenium任务。

有点困难的部分是如何确定远程git存储库是否有新内容,我需要拉动!

3 个答案:

答案 0 :(得分:11)

您可以使用git ls-remote查找:

git ls-remote origin master

此命令将获取主分支的最新sha-1 id,您可以根据需要指定任意数量的分支,或者无需指定所有分支。您可以使用它与本地分支进行比较。

但是,获取所有更改可能更有效,因此您不必两次执行相同的网络操作:

git fetch origin

通过这种方式,您可以在&origin; master&#39;中获得更新,并且可以与&#39; master&#39;进行比较。看是否有更新。这不会合并或变基,因此一旦您检测到有更新,您就可以执行git pullgit mergegit rebase,无论您想要做什么。< / p>

答案 1 :(得分:4)

git fetch
git log ..origin/master --oneline | wc -l

它输出拉动时应用的修订数(提交)。

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

答案 2 :(得分:0)

据我所知,两个命令可能有所帮助。对不起,如果我错了。我很开心。

Git有两个命令可以从远程存储库更新自己。 git fetch会将您与另一个repo同步,下拉您本地没有的任何数据,并为您提供同步时该遥控器上每个分支所在位置的书签。这些被称为“远程分支”并且与本地分支相同,除了Git不允许您检查它们 - 但是,您可以从它们合并,将它们分散到其他分支,在它们上运行历史记录等等。您可以完成所有操作同步后本地的那些东西。

将从远程服务器获取新数据的第二个命令是git pull。这个命令基本上会立即运行一个git fetch,然后是该远程的分支的git merge,它由你当前所在的分支跟踪。分别运行fetch和merge命令会减少魔法,减少问题,但如果你喜欢拉的想法,

假设你有一个远程所有设置并且你想要提取更新,你首先要运行git fetch [alias]告诉Git取下你没有的所有数据,然后你会运行git merge [别名] / [分支]将你在服务器上看到的任何新内容合并到你当前的分支中(就像其他人在此期间推动的那样)。因此,如果您正在与其他几个人一起开展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所做的映射。远程存储库上的“master”分支在本地成为名为“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 log。

git status

列出哪些文件已暂存,未暂存和未跟踪。