是否可以检查远程存储库自上次检查后是否有任何更改而不克隆整个存储库?
在我的场景中,我不需要将源文件保存在我的设备上,我只需要知道远程git存储库是否有任何新的更改。
我知道如果我检查了存储库,我可以这样做:
git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD
但这需要将源文件保留在设备上。
答案 0 :(得分:1)
根据您的git存储库的托管方式,您可能会检查托管软件是否具有有用的API。使用git命令,以下内容应该有效。
您可以通过说
获取遥控器上所有引用的列表及其当前提交哈希值git ls-remote <remote-url>
其中<remote-url>
与您用于克隆的网址相同。
如果存储了此结果,然后稍后再次运行,则可以查看是否已添加,删除或接收更新任何引用(因为在更新的情况下,哈希将更改)。
(请注意,更改的哈希表示引用的历史记录已更改 - 这并不一定意味着内容不同。您可以浅层地获取&#34; old&#34 ;和#34; new&#34;提交使用refs&#39;哈希,并检查他们的树哈希,如果你想知道内容是否已经改变。)
如果您只关心分支机构(即不关心新标签等),您可以说
git ls-remote --heads --refs <remote-url>
如果您不想阅读所有输出,可以将某种脚本放在一起。文档似乎并不能保证显示分支的顺序,但在我的测试中它似乎是词汇顺序。如果你担心这一点,你可以添加一个排序命令,因为顺序对我要建议的内容很重要。无论如何,你可以输出并比较一次运行到下一次运行的结果哈希,而不是存储完整的输出列表,看看是否已经改变了(但你不会能说出什么):
git ls-remote --heads --refs <remote-url> |git hash-object --stdin