如何知道git信息库是否有尚未与服务器源同步的更改?

如何解决如何知道git信息库是否有尚未与服务器源同步的更改?

| 我在Git中设置了大量项目,这些项目以前是在CVS中管理的。如果我对尚未发送到中央服务器的存储库进行了更改,那么Tortoise CVS和Eclipse都非常易于查看(通过图标覆盖)。 用Git有实现此目的的便捷方法吗?我真的不需要图标叠加层,我只需要知道将分支与原始分支进行比较时是否有显着更改。我不介意使用某种脚本来查询所有Git存储库。     

解决方法

诸如“ 0”之类的东西应该给您您已完成但未推送的提交。如果获取原点,然后执行
git log master..origin/master
,则可以看到远程主服务器中的提交。您也可以执行
git log origin/master...master
来查看本地和远程的新提交。 您可以将
git log
替换为
git rev-list
,并轻松找出是否需要将脚本中的内容以及未推送的内容。     ,以下示例仅处理单个存储库。在周围的脚本中使用循环可在多个存储库上运行它们。 在使用以下命令之前,您可能需要运行(例如)ѭ5来更新本地远程跟踪分支(以便检查上游分支的最新提示)。 如果仅关注当前已签出的分支:
git status -sb
如果第一行报告“ ahead”,则当前分支的提交不属于其上游分支。该命令的输出不适合直接由程序使用(这是“瓷器”命令)。对于程序消耗,请使用“管道”命令列出“预先”提交:
git rev-list HEAD@{upstream}..HEAD
您可以将其传送到
wc -l
进行计数。如果您只对“ ahead”状态感兴趣(而不是确切的计数),则
test -n \"$(git rev-list -n 1 HEAD@{upstream}..HEAD)\"
可能会更快。 如果要检查存储库的所有分支:
git branch -v
再次,对于提交不属于其上游分支的分支,您将看到“前进”。这也是一个“瓷器”命令,因此,如果要可靠地检测程序中的状态,则需要使用一些“管道”命令:
git for-each-ref --shell --format=\'
    b=%(refname:short)
    u=${b}\'@{upstream}\'
    if git rev-parse --verify --quiet \"$u\" >/dev/null 2>&1; then
        test -n \"$(git rev-list -n 1 \"$u..$b\")\" &&
        echo \"$b: has unpushed commits\"
    else
        echo \"$b: no upstream configuration\" >&2
    fi
\' refs/heads | sh
调整
echo
语句(或将其替换为其他命令)以适合您的目的。     ,如果您有一个名为origin的远程服务器,请尝试运行以下命令:
git remote show origin
这将给您一个不错的总结。 例如这就是我得到的
git % git remote show origin
* remote origin
  Fetch URL: git://git.kernel.org/pub/scm/git/git.git
  Push  URL: git://git.kernel.org/pub/scm/git/git.git
  HEAD branch: master
  Remote branches:
    html   tracked
    maint  tracked
    man    tracked
    master tracked
    next   tracked
    pu     tracked
    todo   tracked
  Local branches configured for \'git pull\':
    html   merges with remote html
    master merges with remote master
  Local refs configured for \'git push\':
    html   pushes to html   (local out of date)
    master pushes to master (local out of date)
这表明我的本地分支
html
master
已过期。如果我的遥控器上的提交不在我的本地仓库中,它将显示在为git pull配置的分支部分中。 用任何远程存储库的名称替换“ 17”。 如果您不知道起源的名称或其网址,请尝试以下操作:
git remote -v
这将为您提供遥控器及其URL的列表。 编辑添加 如果您有很多子模块,则可以使用
git submodule foreach
,如我在此处所述。您可以重定向输出并解析它以获取所需的内容。     ,昨天,我尝试推出自己的解决方案。这是我想出的(对于单个存储库):
#!/bin/sh

for ref in $(git for-each-ref --format=\'%(refname)\' refs/remotes/); do
    ending=${ref#refs/remotes/}
    remote=${ending%/*}
    branch=${ending#*/}
    if [ \"${branch}\" == \"HEAD\" ]; then continue; fi
    echo -e \"\\e[1;34m$branch on $remote\\e[0m\"
    echo \"AHEAD by:\"
    git log --oneline $branch ^$remote/$branch
    echo \"BEHIND by:\"
    git log --oneline $remote/$branch ^$branch
done
这是基于信息的,我已经提取了多个来源,包括此处的答案。给定我提供的参数,我对\'git log \'命令的操作仍然有些阴暗-但这似乎吐出了我想要的信息。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?