2013-10-11 151 views
3

基本上我正在编写一个crontab任务,每隔1分钟检查一次远程git存储库。如果有变化,它会将它们拉到(到本地回购),通过每个提交并在每次提交时运行一个咕噜硒任务。如何检查您的本地git存储库是否最新

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

+3

只是一个一般的评论:而不是轮询每分钟,这听起来非常低效,不会更好(如果可能)使用[钩子](http://git-scm.com/book/en/Customizing -Git-Git-Hooks)直接在您的远程回购? – codeling

+0

它是一个运行在无头服务器上的crontab任务。它可以处理它。但我会考虑在后期添加它。 – Abramovick

+0

我确定几乎每台机器都可以处理它,只是当你能够使用挂钩时它不是必需的 – codeling

回答

9

您可以使用git ls-remote找到了:

git ls-remote origin master 

此命令会得到主分支的最新SHA-1的ID,您可以根据需要指定为许多分支,或者没有让他们所有。您可以使用它与本地分支进行比较。

git fetch origin 

这样,您将获得“原产地/主”的更新:

但是,这样你就不必做相同的网络操作两次,可能是更有效地获取所有的变化,你可以与'主'进行比较,看看是否有更新。这不会合并或重新绑定,因此一旦检测到有更新,您可以执行git pullgit mergegit rebase,无论您想要做什么。

0

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

Git有两个命令从远程存储库中更新自己。 git fetch会使你与另一个repo同步,拉下你本地没有的任何数据,并给你书签,当你同步时,那个远程的每个分支在哪里。这些被称为“远程分支”,与本地分支相同,但Git不允许您检查它们 - 但是,您可以将它们合并,将它们分别分支到其他分支,在其上运行历史记录等。在同步后在本地进行。

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

假设你有一个远程的所有设置,你想拉更新,你首先会运行git fetch [别名]告诉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'分支已经更新。在我们的示例中,其他开发人员将提议的更新推送到远程分支进行审查,然后再合并到“主”中。

您可以看到Git制作的映射。远程存储库上的'master'分支在本地成为一个名为'github/master'的分支。通过这种方式,您可以通过运行git merge github/master将该远程中的'master'分支合并到本地'master'分支中。或者,您可以通过运行git log github/master^master来查看该分支上有哪些新的提交。如果你的遥控器被命名为'起源',它将是起源/主控。几乎所有使用本地分支运行的命令都可以使用远程分支。

如果你有一个以上的远程存储库,你可以从特定的人通过运行git fetch [alias]获取或通知Git运行git fetch --all.

此外 的git的状态命令与所有的遥控器的同步

git status命令显示工作目录和暂存区域的状态。它可以让你看到哪些更改已经上演,哪些没有,以及哪些文件没有被Git跟踪。状态输出不会显示关于承诺的项目历史记录的任何信息。为此,你需要使用git log。

git status 

列出哪些文件是暂存,非暂存和未跟踪的。

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

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

如果它大于0,则表示存在新内容。

相关问题