5

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

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

4

3 回答 3

12

你可以用它git ls-remote来找出:

git ls-remote origin master

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

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

git fetch origin

这样你会在'origin/master'中得到更新,你可以和'master'比较看看是否有更新。这不会合并或变基,因此一旦您检测到有更新,您就可以执行git pullor git mergeor git rebase,无论您想要做什么。

于 2013-10-11T11:33:34.593 回答
6
git fetch
git log ..origin/master --oneline | wc -l

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

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

于 2013-10-11T12:35:17.357 回答
0

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

Git 有两个命令可以从远程存储库更新自身。git fetch 将使您与另一个 repo 同步,拉下您在本地没有的任何数据,并为您提供同步时该远程上每个分支所在位置的书签。这些被称为“远程分支”,与本地分支相同,只是 Git 不允许您检出它们 - 但是,您可以从它们合并、将它们差异到其他分支、在它们上运行历史日志等。你做所有同步后本地的那些东西。

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

假设你已经设置了一个远程并且你想要获取更新,你首先运行 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' 分支已更新。在我们的示例案例中,其他开发人员正在将提议的更新推送到远程分支以供审查,然后再合并到“主”中。

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

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

还有 git status 命令

git status 命令显示工作目录和暂存区的状态。它可以让您查看哪些更改已暂存,哪些尚未暂存,以及 Git 未跟踪哪些文件。状态输出不会向您显示有关已提交项目历史的任何信息。为此,您需要使用 git log。

git status

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

于 2013-10-11T11:32:28.270 回答