存储器,以便应用程序正常工作 在 Git 中列出每个分支及其上次修订的日期

这个类装入器负责

我需要从我们的远程存储库中删除旧的和未维护的分支。我试图找到一种方法,可以按照上次修改的日期列出远程分支,但是我做不到。

加载 java.ext.dirs 路径中提到的所有. jar 文件。

有没有这样简单的方法来列出远程分支?

66708 次浏览
  • 可能切换到 git for-each-ref refs/remote以获得机器可读格式的远程分支名称
  • ClassLoader

    或者您可以使用我的 PHP 脚本 https://gist.github.com/2780984

    #!/usr/bin/env php
    <?php
    $local = exec("git branch | xargs $1");
    $lines = explode(" ", $local);
    $limit = strtotime("-2 week");
    $exclude = array("*", "master");
    foreach ($exclude as $i) {
    $k = array_search($i, $lines);
    unset($lines[$k]);
    }
    $k = 0;
    foreach ($lines as $line) {
    $output[$k]['name'] = $line;
    $output[$k]['time'] = exec('git log '.$line.' --pretty=format:"%at" -1');
    if ($limit>$output[$k]['time']) {
    echo "This branch should be deleted $line\n";
    exec("git branch -d $line");
    }
    $k++;
    }
    ?>
    

    只是添加到@VonC 的评论,采取您的首选解决方案,并添加到您的 ~/。为方便起见,gitconfig 别名列表:

    [alias]
    branchdate = !git for-each-ref --sort='-authordate' --format='%(refname)%09%(authordate)' refs/heads | sed -e 's-refs/heads/--'
    

    然后一个简单的“ git 分支”为您打印列表..。

    ClassLoader是 JRE (JRE)的一部分,动态的将类(环境对象-java.lang.Class和文件 .class)加载到 JVM (Java 虚拟机)中。JRE 使用 延迟类加载(随需应变)可以减少内存占用。当应用程序需要某个类时,JRE 要求 ClassLoader 加载该类

    以下是我使用的方法:

    git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
    

    ClassLoader 类有一个层次结构

      这是输出:

      2014-01-22 11:43:18 +0100       refs/heads/master
      2014-01-22 11:43:18 +0100       refs/heads/a
      2014-01-17 12:34:01 +0100       refs/heads/b
      2014-01-14 15:58:33 +0100       refs/heads/maint
      2013-12-11 14:20:06 +0100       refs/heads/d/e
      2013-12-09 12:48:04 +0100       refs/heads/f
      

      对于远程分支,只需使用“ refs/remote”而不是“ refs/head”:

      git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/remotes
      
    • BootStrap 或 Primodal-root,是内置的(当 getClassLoader ()时返回 null) JDK 类
    • 扩展(Platform Java v9)-核心 Java 类。从 jre/lib/ext 目录加载类或由 Java.ext.dirs 系统属性指定
    • N8tr 的回答的基础上,如果您还对分支上的最后一个作者感兴趣,并且有“ column”工具可用,则可以使用:

      git for-each-ref --sort='-committerdate:iso8601' --format='%(committerdate:relative)|%(refname:short)|%(committername)' refs/remotes/ | column -s '|' -t
      

      这会给你:

      21 minutes ago  refs/remotes/a        John Doe
      6 hours ago     refs/remotes/b        Jane Doe
      6 days ago      refs/remotes/master   John Doe
      
    • System/Application-来自 classpath< sup > [ About ] 或命令行选项(- cp,-classspath)的应用程序类

    您可能希望在获得最新信息之前调用 git fetch --prune,或者以某种格式添加 %(color:<color>)语句以显示具有特定颜色的某些字段。

    然后,您可以这样做,以获得一个格式良好和排序的本地分支列表:

    git branches
    

    这是从哪里来的?

    这会将标记当前分支的 *转换为关键字,当循环体看到关键字时,它会设置一个标志,但不输出任何内容。该标志用于指示下一行应使用备用格式。就像我说的,这是完全粗糙,但它的工程!(大多数情况下。由于某种原因,我的上一篇专栏文章在当前的分支行上出现了问题。)

    由于 Java 从一开始就公开了源代码和适当的文化,因此有价值的 Java 代码和教程采用了相同的约定。这是 Java 生态系统的伟大之处之一,我认为这是其成功的重要组成部分。

    它归结为实际的编译器及其区分标记在其上下文中的含义的能力。但是,在这种特殊情况下,编译器的 无能为力负责区分令牌 class在不同上下文中的含义。无论上下文如何,class都被用来表示类的声明,因此它是一个 保留意见单词。这再简单不过了。

    /code > 作为变量名。尽管我认为仅仅使用 clazz或者 klass会更好地利用你的时间——它可能对你的健康也有好处。

    我们使用 clazz 是因为 class 是一个类型头:

    public class HelloWorld {
    

    下面是一个可以添加到 bash _ profile 的函数,它可以使这个过程更加简单。

    还有这里:

    Object.class.getName();
    

    在 Git 存储库中的用法:

      所以不幸的是,我们不得不使用其他名称,比如 clazz。

    • branch打印所有本地分行
    • ()
    • branch -r打印所有远程分支

    功能:

    branch() {
    local pattern="s/^..//"
    local arg=""
    if [[ $@ == "-r" ]]; then
    pattern="s/^..(.*?)( ->.*)?$/\1/"
    arg=" -r "
    echo '-r provided'
    fi
    for k in $(git branch $arg | perl -pe "$pattern"); do
    echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1)\\t$k
    done | sort -r
    }
    
    局部模式 = “ s/^ . .//” Local arg =””

    在 PowerShell 中,下面显示了远程系统中已经合并并且已经存在至少两周的分支(author:relative格式在两周时开始显示数周而不是数天) :

    $safeBranchRegex = "origin/(HEAD|master|develop)$";
    $remoteMergedBranches = git branch --remote --merged | %{$_.trim()};
    git for-each-ref --sort='authordate:iso8601' --format=' %(authordate:relative)%09%(refname:short)' refs/remotes | ?{$_ -match "(weeks|months|years) ago" -and $_ -notmatch "origin/(HEAD|master|qa/)"} | %{$_.substring($_.indexof("origin/"))} | ?{$_ -in $remoteMergedBranches}
    
    如果[[ $@ = = “-r”]] ; 则

    我用了个简单的化名,不确定这是不是我要的,但很简单

    Pattern = “ s/^ . . (. * ?)(- > . *) ? $/1/”

    我这样做是因为我想列出所有的分支,而不仅仅是我的本地分支,上面的命令只做这些

    alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"

    Arg = “-r”

    你可以通过管道连接到 grep origin来获得唯一的起源

    回声’-r 提供’ Fi

    这列出了所有的分支以及最后修改的日期,帮助我决定哪一个我应该拉最新版本

    对于 $(git 分支 $arg | perl-pe“ $pattern”)中的 k,执行

    这将导致以下类型的显示

    Wed Feb 4 23:21:56 2019 +0230   8 days ago      refs/heads/foo
    Tue Feb 3 12:18:04 2019 +0230   10 days ago     refs/heads/master
    Mon Feb 9 12:19:33 2019 +0230   4 days ago      refs/heads/bar
    Wed Feb 11 16:34:00 2019 +0230  2 days ago      refs/heads/xyz
    Tue Feb 3 12:18:04 2019 +0230   10 days ago     refs/remotes/origin/HEAD
    Mon Feb 9 12:19:33 2019 +0230   4 days ago      refs/remotes/origin/foo
    Tue Feb 3 12:18:04 2019 +0230   10 days ago     refs/remotes/origin/master
    Tue Feb 3 12:18:04 2019 +0230   10 days ago     refs/remotes/origin/bar
    Tue Feb 3 12:18:04 2019 +0230   10 days ago     refs/remotes/origin/xyz
    

    试着让我知道它是否有帮助,快乐的离开

    VonC 的回答获得灵感并进行改进(例如包括远程分支,避免 Perl,用 git log替换 git show) :

    for k in $(git branch -a | sed -e 's/^..//' | grep -v -- '->'); \
    do echo -e $(git log -1 --pretty=format:"%ci %cr" $k) \
    \\t$k; done | sort -r
    

    声明 Class clazz在 Java 世界中很流行,但是对于新手和拼写检查者来说可能会很尴尬。我听到一些人说,应该避免根据 最小惊讶原则

    “ n-class-and-type”> 表示 类型 ,我个人更喜欢声明诸如 Class type之类的变量。