管道相当于git remote show origin(从Python使用)
当我手动检查本地Git存储库是否需要来自远程服务器的更新时,我将运行管道相当于git remote show origin(从Python使用),python,git,Python,Git,当我手动检查本地Git存储库是否需要来自远程服务器的更新时,我将运行Git remote show upstream并解释其输出。但现在我正试图在一个Python应用程序中实现这一点,我正在向其中添加Git支持 实际上,我试图确定远程服务器上的给定分支是否与给定的本地分支不同,如果不同,关系如何(快进、前进、后退、发散) 我知道如何通过比较git rev list master..upper/master和?git rev list upper/master..master的结果来实现这一点。但
Git remote show upstream
并解释其输出。但现在我正试图在一个Python应用程序中实现这一点,我正在向其中添加Git支持
实际上,我试图确定远程服务器上的给定分支是否与给定的本地分支不同,如果不同,关系如何(快进、前进、后退、发散)
我知道如何通过比较git rev list master..upper/master和?git rev list upper/master..master
的结果来实现这一点。但这只有在从远程服务器获取数据后才起作用
有没有一种方法可以在不先获取的情况下完成这样的比较?一个用途是更新应用程序本身,为此,我认为首先获取是可以接受的。但是我还想浏览所有注册的遥控器及其分支,告诉用户在哪里可以得到更多的东西。我认为首先获取所有遥控器是不可接受的,因为用户可能不需要大部分遥控器 我假设
ls remote
是我正在寻找的命令,但我不知道如何实现我所需要的。我可以比较git ls remote--heads upstream
和git rev parse HEAD^
的结果,以确定是否存在差异,但我不知道如何继续。我是否必须使用
git ls remote-upstream
获取完整的提交列表并手动将其与本地提交列表进行比较?事实上,我希望找到一个与git rev list
相当的、也可以与远程存储库一起使用的版本。也许有人知道git remote show upstream如何进行比较
编辑:@torek:非常感谢您的详细回答。这需要一段时间来消化,但我会在一天中更有效率的时间来完成它,承诺;-)
可能需要澄清预期用途的上下文。也许有些事情比你想象的要简单(因为我不是在做一般的GitGUI客户端) 我们有一个托管在Github上的现有Python应用程序。只有主开发人员才具有对存储库的推式访问权限,并且他只公开其
master
分支
有些用户使用可下载的软件包,有些用户从Git存储库运行应用程序(这对于Python作为解释语言特别有用)
我目前正在实现的第一件事是从应用程序内部通过Git更新自身的接口。(好的,这并不是真正的突破,因为任何人都可以到命令行发布git pull origin master
或任何他命名的遥控器。但我将此作为更高级工具的第一步(学习),以提供git工作流来处理应用程序的文档/项目。对于这一点,总是
fetch
是可以的,因为点击“检查更新”按钮的人应该会接受fetch。同样很清楚的是,一切都是如何工作的,我通过查看远程服务器的URL来确定哪一个(如果有多个)指向“官方”存储库
但也有一些用户(比如我)他们同时也是贡献者。他们通常有分支存储库,因此至少有两个远程站点,主回购和他们的个人分支。有时他们也注册了其他人的分支,以便在他们的贡献被合并到master之前检查他们的贡献。当我接近pull请求时,我有时也会询问around将获取我的新材料,以便提供预拉请求反馈
我现在试图实现的基本上是所有远程设备上的所有分支的列表,其中包含哪些分支具有新材料,以及它们与上游/主节点的关系。例如,告诉它是从主节点分支出来的,17次提交在后,12次提交未包含在上游回购中。我的理由是,完全(定期)获取所有这些远程分支是不好的行为。我认为用户应该只获取他真正想要检查的分支 但从第一次阅读到您的答案,我很可能会在后台获取所有内容,然后解释本地分支和“本地远程”分支之间的比较。无序: 实际上,我希望找到一个与git rev list等效的、也可以与远程存储库一起使用的列表 如果我们想知道某个远程服务器有多少提交而我们没有,下面这一点很重要 实际上,我正在尝试确定远程服务器上的给定分支是否与给定的本地分支不同,如果不同,关系如何(快进、前进、后退、发散)…是否有方法在不首先获取的情况下完成这样的比较 好的,主要是不,虽然这部分取决于你想要在这里的文字程度,以及你需要结果的准确程度。另外,请记住,在你断开与远程设备的连接并从中获得更新后,其他人可能会连接到同一远程设备并更改所有内容。你还编写了远程设备,好像只有ne;可能有多个遥控器 使用
git fetch
与远程设备建立连接,并向远程设备查询有关引用的信息(主要是分支标题和标记,但也包括git注释之类的内容),然后根据需要提供任何新的内容
使用git ls remote
连接到远程设备并查询它们(然后在那里停止)
因此,如果远程设备“很难到达”(例如,建立连接需要一两秒钟,或者需要输入ssh密码或短语),但更新很小和/或很快(一旦建立了连接,就会传输
$ git fetch origin
$ git ls-remote origin
120a630b0b71193a33cd033ae9ddcee1db3df07e HEAD
120a630b0b71193a33cd033ae9ddcee1db3df07e refs/heads/master
$ git remote show origin
* remote origin
Fetch URL: ssh://[host]//tmp/tt.git/
Push URL: ssh://[host]//tmp/tt.git/
HEAD branch: master
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
$ git config --get branch.master.remote
origin
$ git config --get branch.master.merge
refs/heads/master
$ git rev-list 120a630b0b71193a33cd033ae9ddcee1db3df07e..master
eed7b697cab0cbd5babf382f720668e12a86cf2a
224384fed46e1949c88eb514fa67743be66a4c5a
ddc0aab680bab0bd6a7dde4a6ef8cb58ba0368e6
ade842c8562cdccd1e98f7ffd5149a12ddc9226c
$ git rev-list master..120a630b0b71193a33cd033ae9ddcee1db3df07e
$ if git merge-base --is-ancestor 120a630 master; then echo OK; fi
OK
D--E--F
/
A--B--C
\
G--H
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*