Linux 如何让git检查主服务器上的更新?
我对git的了解很差,想寻求帮助 我有一个linux(-only)应用程序,只能用git“下载”(即克隆)。启动时,应用程序应询问git“主服务器”(github)是否有更新Linux 如何让git检查主服务器上的更新?,linux,git,Linux,Git,我对git的了解很差,想寻求帮助 我有一个linux(-only)应用程序,只能用git“下载”(即克隆)。启动时,应用程序应询问git“主服务器”(github)是否有更新 git是否提供了一个命令来检查是否有更新(而不是真正的仅更新检查)?此外,我的应用程序可以读取该命令的返回值吗?我认为git fetch是一个潜在的解决方案。它只更新索引,不更新工作代码。在大型提交集的情况下,这将涉及压缩文件/信息的下载,因此它可能比您想要的更多,但这是您能做的最有用的下载。如果您不想合并,您可以只git
git是否提供了一个命令来检查是否有更新(而不是真正的仅更新检查)?此外,我的应用程序可以读取该命令的返回值吗?我认为git fetch是一个潜在的解决方案。它只更新索引,不更新工作代码。在大型提交集的情况下,这将涉及压缩文件/信息的下载,因此它可能比您想要的更多,但这是您能做的最有用的下载。如果您不想合并,您可以只
git fetch yourmote/yourbranch
,远程/分支规范通常是origin/master
。然后可以分析命令的输出,以查看是否确实存在新的提交。您可以将最新获取的提交引用为yourremote/yourbranch
,也可以通过symrefFETCH\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也有帮助;这就是为什么我没有尝试在这里复制它。