簡體   English   中英

如何使用 Git LFS 跟蹤存儲庫的任何子目錄中的任何(任意)文件 - 但不跟蹤其根目錄中的任何文件?

[英]How do I use Git LFS to track any (arbitrary) file in any subdirectory of a repository - but without tracking any files in its root?

我已經搜索了多天以找到解決方案,並且做了很多試錯游戲,但都沒有成功。

這個想法只是為大量二進制(和所有相關)文件創建一個庫存儲庫,這本質上可以 100% 確保任何用戶將來添加的任何文件都會被 lfs 跟蹤。

但是,根目錄中的 .gitattributes、.gitignore、README.md 等文件當然應該被排除在外。

要了解.gitignore的通配符規則,已經需要博士學位, .gitattributes文檔提到了另外兩個例外(例如禁止否定),我找不到任何關於 Git LFS 是否遵循這些“討厭的規則”的有用信息。

可能已經有一些相關的問題/答案,但到目前為止我找不到任何對我的問題有用的東西。

任何幫助深表感謝。 提前致謝!

編輯: /**/*已經lfs track "{pattern}" */** **/* */*.* */* **/** lfs track "{pattern}"但有時(取決於工作樹狀態)這些通配符模式會被翻譯成巨大的未排序的命名文件分數列表 in.gitattributes (沒有 shell 擴展)。 但是,如果通配符保留在.gitattributes 中,則會發生奇怪的事情,例如合並后不再跟蹤新匹配的文件,或者抱怨應該是指針的文件, git lfs status中列出的文件突然消失......我還應該提到git lfs migrate import總是將通配符 in.gitattributes 呈現為完全無用的現有文件列表。 git lfs migrate --include="{pattern}"這樣的東西被默默地忽略,似乎只跟蹤一些任意選擇的文件擴展名? 我什至設法在 state 中獲得了一個存儲庫,在那里我可以毫無錯誤地推送到遠程,然后服務器上的所有文件都丟失了 - 難以置信。 在我看來,Git LFS 似乎完全不可靠且不可預測。 但也許我做錯了什么。

順便說一句,這是我的測試中的一些版本信息,並且 Git LFS 已安裝好:

  • git-lfs/2.3.4(GitHub;linux amd64;go 1.8.3)
  • git 版本 2.26.2

我必須為遺留系統做一些非常相似的事情。 這是我發現的有效方法:忽略所有內容,然后有選擇地取消忽略。 每個父目錄必須單獨取消忽略,然后才能取消忽略其子目錄。

假設您只想存儲 /bin、/sbin 和 /usr/local/bin。

# Ignore everything
*

# Unignore .gitignore so we can commit it.
!.gitignore

# Unignore /bin and its contents
!bin/
!bin/**
!sbin/
!sbin/**

# Unignore /usr/local/bin and its contents
!usr/
!usr/local/
!usr/local/bin/
!usr/local/bin/**

# Reignore log, lock and tmp files.
*.lock
*.log
.#*
*~
.*.swp

這個想法只是為大量二進制(和所有相關)文件創建一個庫存儲庫,這本質上可以 100% 確保任何用戶將來添加的任何文件都會被 lfs 跟蹤。

Git 和 Git LFS 都不是合適的解決方案。 他們不是發布經理。 Git LFS 增加了不必要的復雜性,對於像可執行文件這樣的小二進制文件沒有必要。

我把它作為權宜之計的解決方案。 我得到了一個完全不受控制的遺留系統,生產文件正在現場編輯; 總比沒有好,但它很爛。 應該盡快找到更好的解決方案。

就我而言,我逐漸用托管服務器、打包軟件、依賴管理、單獨的代碼存儲庫和適當的發布管道替換了它的功能。 然后我停用了舊版服務器。 我建議您也僅將其用作權宜之計並研究適當的解決方案。

另一種權宜之計是使用備份軟件進行增量備份。 僅二進制存儲庫的“歷史”並不是特別有用。

暫無
暫無

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

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