【问题标题】:How to git log a remote branch without fetching repository如何在不获取存储库的情况下 git 记录远程分支
【发布时间】:2013-11-07 20:01:48
【问题描述】:

我需要删除远程存储库上的一个分支,该分支较旧且 30 天,并且对当前进程非常慢

目前

git fetch --depth=1

list=$(git ls-remote --heads git@xxxxx.xx.xx.com:/xxx/xxx-xxx/xxx-xxx-a | grep ci)

for i in $list
do
    if [ -n "$(git log -1 --before='30 days ago' -s origin/$i)" ]; then
    git push origin :$i
    echo " Deleted Branch $i"
    fi
done

【问题讨论】:

  • 我对您的脚本的实际工作方式感到困惑。根据 git 手册页,git fetch --depth 用于浅克隆,但无法从中推送浅克隆!
  • @RobinGreen 我不确定这是否重要,因为他只是删除引用(在删除时不需要进行对象的实际传输)。因此,浅层克隆可能会起作用。也就是说,如果分支提示落后,您最终可能仍会传输相当多的数据。
  • 为什么需要git ls-remote? fetching 应该让你所有的远程分支。看起来你的 git log 正在获取超过 30 天的第一个提交,而不是测试第一个提交是 30 天

标签: git shell


【解决方案1】:

虽然origin/XY 被称为远程分支,但它仍然是存在于本地存储库中的分支。它之所以称为远程分支,是因为它表示该名称的远程存储库分支所在的状态。因此,它确实是一个普通指针,指向应该完全包含在本地存储库中的提交历史记录。

虽然git ls-remote 可能能够告诉您远程存储库中存在哪个分支,但这并不意味着您将在本地存储库中拥有必要的数据来显示有关它的任何信息。请记住,所有操作(除了实际的传输操作,如 fetch/pull 和 push)都是在本地执行的。

因此,为了能够调用git log,您需要获取属于该远程分支历史记录的所有提交对象。这样做的方法是简单地使用git fetch 从远程存储库中获取对象。没有其他方法可以做到这一点。

因此,如果您想访问远程存储库的日志,则必须克隆它以在本地获取信息。

另一种选择是在远程计算机本身上执行此操作,或者拥有例如将向您显示日志的 Web 界面(gitweb、GitHub 等)。

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2014-11-30
    • 2020-11-23
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多