基本上我正在编写一个crontab任务,每隔1分钟检查一次远程git存储库。如果有变化,它会将它们拉到(到本地回购),通过每个提交并在每次提交时运行一个咕噜硒任务。如何检查您的本地git存储库是否最新
有点卡住的部分是如何找出远程git存储库是否有新的内容,我需要拉!
基本上我正在编写一个crontab任务,每隔1分钟检查一次远程git存储库。如果有变化,它会将它们拉到(到本地回购),通过每个提交并在每次提交时运行一个咕噜硒任务。如何检查您的本地git存储库是否最新
有点卡住的部分是如何找出远程git存储库是否有新的内容,我需要拉!
您可以使用git ls-remote
找到了:
git ls-remote origin master
此命令会得到主分支的最新SHA-1的ID,您可以根据需要指定为许多分支,或者没有让他们所有。您可以使用它与本地分支进行比较。
git fetch origin
这样,您将获得“原产地/主”的更新:
但是,这样你就不必做相同的网络操作两次,可能是更有效地获取所有的变化,你可以与'主'进行比较,看看是否有更新。这不会合并或重新绑定,因此一旦检测到有更新,您可以执行git pull
或git merge
或git rebase
,无论您想要做什么。
据我所知,两个命令可能有帮助。对不起,如果我错了。我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
列出哪些文件是暂存,非暂存和未跟踪的。
git fetch
git log ..origin/master --oneline | wc -l
它输出拉动时应用的修订(提交)的数量。
如果它大于0,则表示存在新内容。
只是一个一般的评论:而不是轮询每分钟,这听起来非常低效,不会更好(如果可能)使用[钩子](http://git-scm.com/book/en/Customizing -Git-Git-Hooks)直接在您的远程回购? – codeling
它是一个运行在无头服务器上的crontab任务。它可以处理它。但我会考虑在后期添加它。 – Abramovick
我确定几乎每台机器都可以处理它,只是当你能够使用挂钩时它不是必需的 – codeling