Linux 如何让git检查主服务器上的更新?

Linux 如何让git检查主服务器上的更新?,linux,git,Linux,Git,我对git的了解很差,想寻求帮助 我有一个linux(-only)应用程序,只能用git“下载”(即克隆)。启动时,应用程序应询问git“主服务器”(github)是否有更新 git是否提供了一个命令来检查是否有更新(而不是真正的仅更新检查)?此外,我的应用程序可以读取该命令的返回值吗?我认为git fetch是一个潜在的解决方案。它只更新索引,不更新工作代码。在大型提交集的情况下,这将涉及压缩文件/信息的下载,因此它可能比您想要的更多,但这是您能做的最有用的下载。如果您不想合并,您可以只git

我对git的了解很差,想寻求帮助

我有一个linux(-only)应用程序,只能用git“下载”(即克隆)。启动时,应用程序应询问git“主服务器”(github)是否有更新


git是否提供了一个命令来检查是否有更新(而不是真正的仅更新检查)?此外,我的应用程序可以读取该命令的返回值吗?

我认为git fetch是一个潜在的解决方案。它只更新索引,不更新工作代码。在大型提交集的情况下,这将涉及压缩文件/信息的下载,因此它可能比您想要的更多,但这是您能做的最有用的下载。

如果您不想合并,您可以只
git fetch yourmote/yourbranch
,远程/分支规范通常是
origin/master
。然后可以分析命令的输出,以查看是否确实存在新的提交。您可以将最新获取的提交引用为
yourremote/yourbranch
,也可以通过symref
FETCH\u HEAD
引用

注意:有人提醒我,
FETCH\u HEAD
指的是最后提取的分支。因此,一般情况下,您不能使用
fetch\u HEAD
依赖
git获取远程
,因为前者获取所有跟踪的分支,因此后者可能不会引用
yourbrange
。另外,

  • 你最终得到了比严格要求更多的东西
  • 另请参阅查看但不是实际下载的更改
  • 以下不一定是最紧凑的格式,只是可读的示例
也就是说,这里有一些用于检查远程分支更新的选项,我们将用
yourmote/yourbrance
来表示:

0。处理以下操作中的错误:

0.1如果您试图
git获取远程
,并且
git
会给出如下错误

conq: repository does not exist.
fatal: ambiguous argument 'yourremote/yourbranch': unknown revision or path not in the working tree.
这可能意味着您没有定义远程字符串。使用
git remote--verbose
检查定义的远程字符串,然后
git remote根据需要添加您的远程yourremoteURI

0.2如果
git
给出如下错误

conq: repository does not exist.
fatal: ambiguous argument 'yourremote/yourbranch': unknown revision or path not in the working tree.
这可能意味着您没有本地的
yourmote/yourbrance
。我将把它留给更有知识的人来解释远程本地的含义:-),但这里只说您应该能够用

git fetch yourremote
之后,您应该能够成功地重复所需的命令。(如果您正确定义了git remote yourremote:请参阅上一项。)

1.如果您需要详细信息,请显示您的远程/yourbranch并将其与当前的
git显示您的分支

2.如果您只想看到差异,
git diff yourbranch yourremote/yourbranch

3.如果您只想对哈希进行比较,请将
git rev parse yourmote/yourbrance
git rev parse yourbrance


4.如果您想使用日志回溯发生的事情,可以执行类似于
git log--pretty=oneline yourmote/yourbrance…yourbrance
(注意使用三个点)。

如果您确实不想实际使用带宽和获取新提交,但只需检查是否有任何内容可获取,您可以使用:

git fetch --dry-run [remote]
其中
[remote]
默认为
origin
。但是,您必须解析输出,其内容如下:

From git://git.kernel.org/pub/scm/git/git
   2e49dab..7f41b6b  master     -> origin/master

因此,只需获取所有内容(
git fetch[remote]
),然后查看diff/log,例如
master
[remote]/master

之间的diff/log,真的容易多了。很酷,谢谢,我刚刚完成了,然后:git diff——只命名HEAD origin/master。它向我显示了所有的更改。但我还有两个问题:(1)我是否也可以显示提交消息?(2) git diff为我提供了一个文本编辑器来处理这些差异。我需要一些我可以用我的应用程序解析的东西。同时还是代替?如上所述,
gitshow
或多或少地为您提供您想要的任何东西。您仍然可以使用
--pretty=YOURFORMATHERE
格式化消息
git diff HEAD FETCH\u HEAD
不会提示您进行编辑。太好了!(2) 可以通过--no pager选项解决。所以我现在所做的就是:
git-fetch-origin&&git--no-pager-log--pretty=oneline-fetch\u-HEAD…HEAD
关于各种命令的好建议,但是参数有一个巨大的问题:
git-fetch-origin
更新了origin的所有远程分支,最后一个恰好被获取的分支都留在
fetch\u-HEAD
中。使用
origin/master
或其他特定的远程分支。事后来看,老实说,这应该被认为是问题的真正答案。我在我的答案中添加了一个参考。@I10i:我认为你答案中的diff/log变化对OP也有帮助;这就是为什么我没有尝试在这里复制它。