簡體   English   中英

無法取消忽略 GIT 子目錄

[英]Not able to un-ignore GIT sub-directory

很簡單,我希望取消忽略被忽略目錄中的子目錄。

我的.gitignore

app/migrations/
!app/migrations/config/Migrations/*

它不起作用,如果我刪除第一行app/migrations未被忽略,但第二行沒有按預期工作。 我也試過:

!app/migrations/config/*

但似乎不可能不忽略?

更新

這似乎是 GIT 的一個缺點,它不能正確支持不可忽略的子目錄。 令人驚訝的是,無論是疏忽還是錯誤,這樣的標准工具都無法支持如此簡單的配置。

這將起作用,並且從根.gitignore有效工作的最短序列:

app/migrations/*
!app/migrations/config
app/migrations/config/*
!app/migrations/config/Migrations

(將第二行寫成!app/migrations/config/可能更清楚更明確,但只要config一個目錄,效果是一樣的。見我下面的補充說明。)

簡而言之,您必須忽略然后取消忽略每個子目錄。

這是正確的,因為當一個目錄實際上被忽略時(通過最后一個匹配的.gitignore規則),這給了 Git忽略完全掃描目錄的權限。 因此,它永遠不會看到該目錄中的任何文件或子目錄。 然而,它非常有效:Git 從不需要首先打開目錄。 這就是為什么這條規則按其工作方式運作的原因。

但是,這不能 100% 起作用,因為 app/migrations/config/* 在它應該只是 app/migrations/config/Migrations 時未被忽略。

那是因為你說要那樣做。 說做你的意思,你就可以了。 :-)

更重要的是,這不僅過於復雜,而且還會導致幾乎不可讀和臃腫的 git-ignore 文件 - 6 行只是為了取消忽略子目錄。

嗯,四行。 也就是說,我確實同意這過於復雜。 Git 應該識別模式:

dir/*
!dir/sub/something

並自動插入適當的!dir/sub/ 同樣適用於:

dir/*
!dir/sub1/sub2/something

在這里,Git 可以根據需要自動插入!dir/sub1/!dir/sub1/sub2/規則,並根據需要使用相應的“忽略其中的所有文件”規則。 如果dir/subdir/sub1和/或dir/sub1/sub2是文件而不是目錄,這些未忽略的插入應該以/結尾。

正如更新中提到的,我試圖實現的沒有得到適當的支持,我幾乎可以實現我想要的:

app/migrations/
!app/migrations
app/migrations/config/
!app/migrations/config
app/migrations/config/Migrations/
!app/migrations/config/Migrations

簡而言之,您必須忽略然后取消忽略每個子目錄。 但是,這不能 100% 起作用,因為 app/migrations/config/* 在應該是 app/migrations/config/Migrations 時未被忽略。 更重要的是,這不僅過於復雜,而且還會導致幾乎不可讀和臃腫的 git-ignore 文件 - 6 行只是為了取消忽略子目錄。

希望這將幫助其他被此限制絆倒的人。

根據 Git 文檔:

如果排除了該文件的父目錄,則無法重新包含該文件。

如果您取消忽略所有文件夾直到您想要的文件夾,則可以實現您想要的:

app/migrations/*

!app/migrations/config/*

app/migrations/config/*

!app/migrations/config/Migrations/*

https://stackoverflow.com/a/5534865/2543566的可能重復項

暫無
暫無

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

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