簡體   English   中英

如何將 Git LFS 文件的舊版本打印到標准輸出(LFS 的 git show / git cat-file)?

[英]How to print a Git LFS file's old version to stdout (git show / git cat-file for LFS)?

這個問題的另一個標題可能是“如何檢出 Git-LFS 托管文件的多個版本?”

我想檢查存儲在 Git-LFS 中的文件的多個版本。 因此,我希望在我的工作目錄中並排放置此文件的多個版本。 像這樣的事情是我的想法:

git show v1:./myfile.ipynb > myfile-v1.ipynb
git show v2:./myfile.ipynb > myfile-v2.ipynb

這不能按預期工作:文件由 Git-LFS 管理,因此在每個版本中git show其內容看起來像

version https://git-lfs.github.com/spec/v1
oid sha256:62aafe00ec8b61a37dd729e7d3a723382...
size 20439

我對文件的“真實”、Git-LFS 管理的內容感興趣,而不是 LFS 存儲在 Git 自己的樹中的指針文件。

如何創建未跟蹤的、自定義命名的文件,每個文件都包含 Git-LFS 跟蹤的文件的特定版本? 這不需要是一個單一的命令,我接受了 Git,需要用於單一概念操作的多步驟腳本。

將 lfs 指針放入git lfs smudge會得到你想要的。 例如:

git cat-file blob <blob-sha> | git lfs smudge

或者,如果您有一個 commit-ish(一個提交哈希、分支名稱、只是HEAD等)和一個文件名:

git cat-file blob <commit-ish>:path/to/my-large-file.name | git lfs smudge

您可以將輸出重定向到文件中。

更新@Markonius 的回答是正確的方法。

這是一個基於對 LFS 存儲庫進行試驗的腳本。 我沒有詳細查看 LFS 協議,因此可能存在無法解釋的怪癖,但它適用於我的簡單案例。

git-lfs-cat-文件

相關詳情如下:

  • LFS 文件存儲在索引中,結構如下:

     version https://git-lfs.github.com/spec/v1 oid sha256:abcdeffffffffffffff size nnnnnnnn
  • 實際的 LFS 對象將在.git/lfs/objects/ab/cd/abcdeffffffffffffff

上次我使用 LFS 時,項目頁面上有關於更好的集成的對話 - 例如通過編寫可以通過.gitattributes插入的差異和/或合並工具。 這些似乎並沒有被視為高優先級,因為 LFS 的主要預期用例是保護大型二進制文件(但我當然遇到過多種情況,其中要么我有一個大文本文件,要么是唯一合理的方法設置 LFS 跟蹤規則投射足夠寬的網絡以捕獲一些較小的文本文件)。 我不確定這些工具是否有任何進展,因為我有一段時間沒有查看項目頁面。

如果沒有這些東西,就沒有一種特別“巧妙”的方式來做你所要求的事情。 您可以設置兩個工作樹並檢查不同的版本。 您可以檢出一個版本,重命名它,然后檢出另一個。

暫無
暫無

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

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