首页 > 解决方案 > 如何获取按提交时间排序的 git 存储库列表?

问题描述

我建立了自己的服务器来托管一些私有 git 存储库。

我正在研究我的私人“回购库”的视觉表示(使用 php 后端)。
这一切都很好,我可能会在某个时候开源它。


我当前的问题:创建所有存储库的列表(我已经这样做了),它按最后提交时间排序(到主分支)。

我目前使用这个函数来获取我的(裸)git 存储库的列表:

function listRepositories() {
  global $SYSTEM_PATH;

  exec("ls $SYSTEM_PATH/repos/ -t", $repoDirectories);

  $repos = array_map(function($repo) {
    return str_replace("$SYSTEM_PATH/repos/", "", $repo);
  }, $repoDirectories);

  return $repos;
}

但是,ls $SYSTEM_PATH/repos/ -t我目前用来获取 repos 列表的命令并没有按照我想要的方式对它们进行排序。
如果我将较旧的存储库复制到存储库目录 ( $SYSTEM_PATH/repos/),它们会出现在列表顶部。

此命令返回最后一次提交时间(unix 时间戳):

git log -1 --format=%ct

但是,我还没有设法将所有这些结合起来以有效的方式实现我想要的。


感谢您帮助我实现它,我感谢这个社区教给我的一切!


相关问题:

标签: phplinuxgit

解决方案


您需要循环进入每个存储库,以可排序的格式输出最后提交时间戳(让我们使用 unix 时间),排序并输出排序的存储库名称:

find $SYSTEM_PATH/repos/ -maxdepth 1 -type d |
while read repo; do
    git -C "$repo" --no-pager log -1 --format="%ct $repo" 2>/dev/null
done | sort -nr | awk '{print $2}'

推荐阅读