【问题标题】:Can I issue git rev-parse on remote repository without a local copy?我可以在没有本地副本的情况下在远程存储库上发出 git rev-parse 吗?
【发布时间】:2013-10-23 19:00:51
【问题描述】:

我的本​​地 git 存储库位于加密卷内。我希望只有在远程有新提交时才能运行git pull --all。但是,我无法使用像here 这样的接收后挂钩,因为我没有加密卷的密码。这意味着即使触发了钩子,我仍然不知道安装卷和提取新更改的密码。所以我正在寻找其他一些替代方案,我想到的一种可能方式是向远程询问最新版本的 SHA,并将其与本地副本知道的最新版本 SHA 进行比较,如果它们匹配我不需要运行 pull 命令,如果它们不匹配,那么我需要运行 git pull 命令。

有没有办法可以在远程存储库上运行git rev-parse master

你可以得到更多关于我的问题的背景here

【问题讨论】:

    标签: git bitbucket git-pull


    【解决方案1】:

    你不能从字面上做到这一点。

    有两个简单的近似:

    • 如果您可以在遥控器上使用 ssh(或其他访问器),您可以在那里运行 git rev-parse 甚至 git rev-list,这样就可以得到尽可能多的 SHA-1。
    • 您可以使用git ls-remote 从远程获取head SHA-1(包括refs/heads/master)。假设您在本地拥有头部 SHA-1,所有这些都会告诉您“相同”或“不同”。如果它们不同,您将无法准确说出为什么(尽管如果您使用当地的转速,您可能会得到足够的结果)。

    不过,这个问题有些奇怪:您说 local 存储库位于您没有密码的加密卷中。如果是这样,你怎么知道当地的是什么,和/或他们的历史?它们记录在 repo 中。

    【讨论】:

    • 非常感谢您回答我的问题。 git ls-remote 是我正在寻找的命令。比较git ls-remotegit rev-parse master 的输出将告诉我我的本地存储库是否已更新。至于你的问题,你可能想看看here。我不知道加密卷的密码,只有用户知道密码。所以他们也给了我,然后我可以挂载卷(并运行 git 命令)。
    • 啊,好的。也许这不适用于这种情况,那么:本地 repo 可能领先于远程,因此远程上的 fetch 或 pull 无效;并且两者有可能发生分歧,因此 fetch 带来了新的东西,但是本地和远程仍然不同步。例如,假设本地和远程在(比如)badcafe 同步,然后有人在本地执行git commit,创建 rev defaced。 rev 数字不匹配,但 fetch 没有任何内容;只有push 可以使这些同步。
    • 在我的情况下这不是问题,因为没有人编辑加密卷中的文件。有时,用户会要求系统从各种来源编译二进制文件。每个源都是加密卷内的本地 git 存储库。大多数存储库不需要只更新其中的几个,而不是为每个存储库运行git pull --all,我可以使用您的建议运行快速检查并仅对需要更新的存储库运行拉取。由于没有人编辑本地存储库中的文件,我相信您的解决方案会很好用。再次感谢:-)
    • 您还可以使用ls-remote 使用git ls-remote [url] [tag/branch/commit] 之类的东西检查远程上的标签/分支/提交。这将输出给定标签、分支或提交的提交 ID/哈希(如果不存在,则不输出)。
    【解决方案2】:

    你有不想拉的理由吗?如果是因为拉动中涉及的合并,您可以随时发出git fetch 来获取标题并保持工作副本不变

    【讨论】:

    • 耗时太长,请查看here 了解全部情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2011-08-06
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多