簡體   English   中英

如何查看git子樹的歷史?

[英]How to view history of git subtree?

我有兩個存儲庫(我們稱它們為 oldrepo1 和 oldrepo2)。 這兩個存儲庫在其當前歷史記錄中分別有 20k 和 21k 次提交。 我將它們合並到一個新的倉庫中,每個倉庫都在一個子目錄下:

新倉庫/舊倉庫1

新倉庫/舊倉庫2

我已經使用這些命令來填充新的 repo

git subtree add --message="Migrate oldrepo1" --prefix=oldrepo1 <oldrepo1 url> master

git subtree add --message="Migrate oldrepo2" --prefix=oldrepo2 <oldrepo2 url> master

當我進入 newrepo 的根目錄並運行“git --no-pager log --graph --oneline”時,我得到了 41k 提交,正如預期的那樣,但是如果我深入到下面的任何級別並運行 git log 我得到是“遷移 oldrepoX”提交:

例如,我有一個在原始倉庫中有 60 處更改的文件,但是當我在新倉庫中的同一個文件上運行 git log 時,我得到的只是:

commit <commitid>
  Author: Me <me@myselfandi.com>
  Date:   Fri Sep 18 23:17:28 2020 -0700

      Migrate oldrepo1

      git-subtree-dir: oldrepo1
      git-subtree-mainline: <somecommitid>
      git-subtree-split: <somecommitid>

我在遷移時沒有壓縮任何歷史記錄,那么為什么我在新的 repo 中看不到對這個文件的 60 次提交?

當我在同一個文件上運行 git log 時......

您沒有顯示您使用的實際命令,但讓我們假設,例如,它是:

git log path/to/file.ext

或者:

(cd path; git log to/file.ext)

兩者都做同樣的事情。 更一般地,任何包含路徑的git log命令都會執行此操作。

有問題的this稱為 History Simplification(參見Git log history simplification, elaborations example in git log's manual )。 git log文檔最近得到了改進(在提交8d049e182e2e... ),所以也看看。 這種歷史簡化只能通過重命名跟蹤單個文件或路徑,會遺漏某些情況,並且通常需要使用--follow選項。

編輯:我忘了提到git subtree add是一個特別困難的情況,即使--follow也無濟於事(通常)。 現有的--follow選項是一個可怕的黑客,確實需要更換,但十多年來一直如此,並且很難找到一個好的替代品。

我選擇了一種不同的方法,使用 git-filter-repo 將每個 repo 重新映射到子文件夾中,並將這些修改后的 repo 合並到新的 repo 中,如 x-yuri 在本討論中所述:

如何將現有的 Git 存儲庫導入另一個?

詳細說明如下:

https://gist.github.com/x-yuri/6161d90d1af8ebac6e560bcef548c1c3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM