Làm cách nào để dừng theo dõi và bỏ qua các thay đổi đối với tệp trong Git?


1731

Tôi đã nhân bản một dự án bao gồm một số .csprojtập tin. Tôi không cần / như các csprojtệp cục bộ của mình bị Git theo dõi (hoặc được đưa lên khi tạo một bản vá), nhưng rõ ràng chúng là cần thiết trong dự án.

Tôi đã thêm vào *.csprojĐỊA PHƯƠNG của mình .gitignore, nhưng các tệp đã có trong repo.

Khi tôi nhập trạng thái git, nó sẽ hiển thị các thay đổi csprojmà tôi không quan tâm đến việc theo dõi hoặc gửi các bản vá.

Làm cách nào để xóa "theo dõi" các tệp này khỏi repo cá nhân của tôi (nhưng giữ chúng trong nguồn để tôi có thể sử dụng chúng) để tôi không thấy các thay đổi khi tôi thực hiện trạng thái (hoặc tạo bản vá)?

Có một cách chính xác / kinh điển để xử lý tình huống này?


18
Một câu hỏi rất hữu ích, nhưng tôi tò mò về lý do tại sao bạn không muốn theo dõi các thay đổi đối với .csprojtệp, đây là một phần rất quan trọng của bất kỳ dự án nào. Thay đổi đối với .csproj.usertập tin hoặc bất kỳ .Publish.XMLtập tin tôi hoàn toàn có thể hiểu được không theo dõi, nhưng tôi tò mò là tại sao bạn sẽ không muốn theo dõi .csproj...
Owen Blacker

7
Có lẽ họ sử dụng một IDE khác?
Jarrett

3
Trớ trêu thay, tôi đã đến với chủ đề này bởi vì tôi đang tìm cách xóa các tệp .suo khỏi một repo nhưng giữ chúng cục bộ. Đối với hậu thế, phát triển .Net yêu cầu bạn giữ các tệp .csproj trong repo và những thay đổi đó phải luôn được theo dõi trừ khi bạn muốn cảm thấy phẫn nộ của bất kỳ nhà phát triển nào khác trong dự án của bạn. Nếu không chắc chắn, hãy xem các tập tin gitignore repo trên GitHub: github.com/github/gitignore/blob/master/VisualStudio.gitignore
longda

1
@Cupdding, câu hỏi bạn đã liên kết được viết 15 ngày sau câu hỏi này? Có lẽ bạn có một suy nghĩ khác?
stephenmurdoch

@marflar câu hỏi kinh điển không nhất thiết phải là câu hỏi cũ nhất , chỉ là câu hỏi hay nhất . Câu hỏi tôi liên kết có 20 câu trả lời, trong khi câu trả lời này chỉ có 5.

Câu trả lời:


2129

Chỉ cần gọi git rm --cachedvào từng tệp bạn muốn xóa khỏi kiểm soát sửa đổi là ổn. Miễn là các mẫu bỏ qua cục bộ của bạn là chính xác, bạn sẽ không thấy các tệp này được bao gồm trong đầu ra của trạng thái git.

Lưu ý rằng giải pháp này sẽ xóa các tệp khỏi kho lưu trữ, vì vậy tất cả các nhà phát triển sẽ cần duy trì các bản sao của tệp (kiểm soát không sửa đổi) cục bộ của riêng họ

Để ngăn git phát hiện các thay đổi trong các tệp này, bạn cũng nên sử dụng lệnh này:

git update-index --assume-unchanged [path]

Những gì bạn có thể muốn làm: (từ bên dưới @Ryan Taylor trả lời )

  1. Điều này là để nói với git bạn muốn phiên bản độc lập của tệp hoặc thư mục. Chẳng hạn, bạn không muốn ghi đè (hoặc xóa) các tệp cấu hình sản xuất / dàn.

git update-index --skip-worktree <path-name>

Câu trả lời đầy đủ có ở đây trong URL này: http://source.kohlerville.com/2009/02/untrack-files-in-git/


187
"git rm --cached <file>" sẽ xóa <file> khỏi kiểm soát phiên bản, trong khi vẫn giữ nó trong kho lưu trữ đang hoạt động. Cho dù đó là những gì bạn muốn ...
Jakub Narębski

51
Nhưng khi người khác sẽ kéo kho lưu trữ, liệu tệp * .csproj của họ sẽ bị xóa? Bởi vì nếu chúng tôi muốn tập tin không bị theo dõi, nhưng không bị xóa.
FMaz008

23
Nếu bạn đang cố xóa TẤT CẢ các tệp trong một thư mục, hãy kết hợp nó với git ls-files: git ls-files | xargs git rm --cached- sẽ xóa mọi thứ khỏi chỉ mục git trong một thư mục nhất định mà không xóa các tệp thực tế.
Marco

129
git rm --cached -r <dir>hoạt động đệ quy trên một thư mục và tất cả các tệp trong đó.
Chris K

41
Điều này sẽ dừng theo dõi tệp, bảo quản tệp cục bộ, nhưng khiến nó bị xóa đối với bất kỳ ai kéo
Edward Newell

249

Nếu bạn làm như vậy git update-index --assume-unchanged file.csproj, git sẽ không kiểm tra file.csproj để biết các thay đổi tự động: điều đó sẽ ngăn chúng xuất hiện trong trạng thái git bất cứ khi nào bạn thay đổi chúng. Vì vậy, bạn có thể đánh dấu tất cả các tệp .csproj của mình theo cách này - mặc dù bạn sẽ phải đánh dấu thủ công bất kỳ tệp mới nào mà repo ngược dòng gửi cho bạn. (Nếu bạn có chúng trong .gitignorehoặc .git/info/exclude, thì những cái bạn tạo sẽ bị bỏ qua)

Tôi không hoàn toàn chắc chắn các tệp .csproj là gì ... nếu chúng là thứ gì đó dọc theo các dòng cấu hình IDE (tương tự như các tệp .eclipse và. Classpath của Eclipse) thì tôi khuyên bạn nên đơn giản không bao giờ được kiểm soát nguồn tại tất cả. Mặt khác, nếu chúng là một phần của hệ thống xây dựng (như Makefiles) thì rõ ràng chúng nên --- và cách nhận các thay đổi cục bộ tùy chọn (ví dụ: từ local.csproj a la config.mk) sẽ hữu ích : phân chia việc xây dựng thành các phần toàn cầu và ghi đè cục bộ.


8
csproj là một tệp dự án C #, theo dõi các tệp nào được bao gồm trong dự án của bạn và một số cấu hình khác, nó PHẢI được kiểm soát nguồn để dự án hoạt động
SparK

4
Đây là câu trả lời đúng duy nhất ở đây! Tôi đã sử dụng câu trả lời @araqnids trong nhiều năm và nó hoạt động chính xác như được yêu cầu để giải quyết vấn đề này.
NHDaly

Ý nghĩa của tiền tố 'tập tin' trong đối số của lệnh là gì? Tại sao không phải là nó .csproj?
GreenAsJade

1
Có một số cách bạn có thể phát hiện ra rằng điều này đã được thực hiện cho một tập tin, hoặc cho những tập tin này đã được thực hiện trong một repo? Tôi hơi lo lắng về việc quên rằng tôi đã làm điều này, sau đó tự hỏi tại sao cái tệp này không được cập nhật, sau này!
GreenAsJade

4
@GreenAsJade: git ls-files -vsẽ hiển thị các tệp được giả sử không thay đổi bằng chỉ báo chữ thường (ví dụ: hthay vì thông thường Hcho các tệp được lưu trong bộ nhớ cache).
Amadan

238

Có 3 lựa chọn, bạn có thể muốn # 3

1. Điều này sẽ giữ tệp cục bộ cho bạn, nhưng sẽ xóa nó cho bất kỳ ai khác khi họ kéo.

git rm --cached <file-name> hoặc là git rm -r --cached <folder-name>

2. Đây là để tối ưu hóa, giống như một thư mục có số lượng tệp lớn, ví dụ SDK có thể sẽ không bao giờ thay đổi. Nó bảo git ngừng kiểm tra thư mục khổng lồ đó mỗi lần để thay đổi, cục bộ, vì nó sẽ không có bất kỳ. Cácassume-unchanged chỉ số sẽ được đặt lại và file (s) ghi đè nếu có sự thay đổi ở thượng nguồn đến tập tin / thư mục (khi bạn kéo).

git update-index --assume-unchanged <path-name>

3. Điều này là để nói với git bạn muốn phiên bản độc lập của tệp hoặc thư mục. Chẳng hạn, bạn không muốn ghi đè (hoặc xóa) các tệp cấu hình sản xuất / dàn.

git update-index --skip-worktree <path-name>

Điều quan trọng cần biết là git update-index sẽ không truyền bá bằng git và mỗi người dùng sẽ phải chạy nó một cách độc lập.


8
Câu trả lời này là đầy đủ nhất - nó cung cấp các giải pháp khác nhau với sự phân nhánh của từng loại. Trường hợp cụ thể tôi đang làm việc có mật khẩu được nhúng trong tệp cấu hình. Tôi muốn tuyên truyền một tệp mẫu sau đó thêm mật khẩu vào bản sao của mình. Các bản sao với mật khẩu nên được bỏ qua và không được ghi đè.
bmacnaughton

1
Làm cách nào tôi có thể kiểm tra, tại địa phương của mình, tệp nào áp dụng cho 'giả định không thay đổi' hoặc 'bỏ qua công việc'?
Supaw Pusavanno

3
@SupawatPusavanno để xem những tập tin nào trước đây bạn đã chọn không giả định hoặc bỏ qua công việc, hãy xem câu trả lời này stackoverflow.com/questions/42363881/ . - nó sử dụng grepgit ls-files
Ryan Taylor

1
Câu trả lời rất hay. Nhưng git ném lỗi khi tôi cố chuyển sang một nhánh khác: lỗi: "Thay đổi cục bộ của bạn đối với các tệp sau sẽ bị ghi đè bằng thanh toán ....." và giải pháp là xóa các thay đổi trước khi chuyển đổi và bỏ ẩn khi bạn trở lại chi nhánh
PhantomReference

@RyanTaylor: Tôi đã thử giả sử không thay đổi trước (không hoạt động) và bỏ qua lệnh worktree (không hoạt động), khi tôi kiểm tra với trạng thái git, các tệp không hiển thị có nghĩa là lệnh đã hoạt động. Nhưng khi tôi kéo mã lại từ git origin repo it gives me error that your local changes would be overwrittentrong 2 tệp đó thì điều đó có nghĩa là nó không bị bẻ khóa phải không?
NeverGiveUp161

152

Đây là một quy trình gồm hai bước:

  1. Xóa theo dõi tệp / thư mục - nhưng giữ chúng trên đĩa - bằng cách sử dụng

    git rm --cached 
    

    Bây giờ họ không hiển thị là "đã thay đổi" nhưng vẫn hiển thị là

        untracked files in  git status -u  
    
  2. Thêm chúng vào .gitignore


56
Không, điều này sẽ xóa tệp khỏi theo dõi, bảo quản tệp cục bộ, nhưng khiến nó bị xóa đối với bất kỳ ai kéo .
Edward Newell

1
Trong trường hợp của tôi, tôi vô tình thêm một thư mục mà tôi không muốn theo dõi, vì vậy đây là thứ tôi cần.
trai

4
Vâng, đó thực sự là câu trả lời sai cho câu hỏi khi được hỏi - nhưng có lẽ đó là câu trả lời đúng cho hầu hết mọi người tìm thấy câu hỏi này trong kết quả tìm kiếm (như tôi).
Andrew Spencer

95

Câu trả lời được chấp nhận vẫn không hiệu quả với tôi

Tôi đã sử dụng

git rm -r - đã đóng gói.

git thêm.

git commit -m "sửa lỗi .gitignore"

Tìm thấy câu trả lời từ đây


Liên kết đó rất hữu ích, đặc biệt là xóa đệ quy tất cả các tệp trong .gitignore
rmcsharry

9
Tôi đã quay lại đây 3 lần, hy vọng tôi có thể cam kết với bộ nhớ trước lần tiếp theo!
Harry Bosh

Nhận xét của @Edward Newell như trong câu trả lời ở trên cũng áp dụng ở đây: "điều này sẽ xóa tệp khỏi theo dõi, bảo quản cục bộ, nhưng khiến nó bị xóa đối với bất kỳ ai kéo ".
ToJo

47

Quên .gitignore của bạn?

Nếu bạn có toàn bộ dự án cục bộ nhưng quên thêm bạn git bỏ qua và hiện đang theo dõi một số tệp không cần thiết, hãy sử dụng lệnh này để xóa mọi thứ

git rm --cached -r .

hãy chắc chắn rằng bạn đang ở gốc của dự án.

Sau đó, bạn có thể làm như bình thường

Thêm vào

git add .

Cam kết

git commit -m 'removed all and added with git ignore'

Đẩy

git push origin master

Phần kết luận

Hy vọng điều này sẽ giúp những người phải thay đổi .gitignorehoặc quên tất cả cùng nhau.

  • Nó loại bỏ toàn bộ bộ đệm
  • Nhìn vào .gitignore của bạn
  • Thêm các tệp bạn muốn theo dõi
  • Đẩy đến repo của bạn

4
Khi bạn đang nói về việc loại bỏ hoặc thêm, bạn đang quên nói khi nào và ở đâu. Xóa khỏi danh sách theo dõi? Từ kho lưu trữ? Từ không gian dự án địa phương? Loại bỏ lúc kéo? Tại cam kết? Lúc đẩy? Than ôi, tất cả các tác giả ở đây có cùng một vấn đề.
Gangnus 11/03/2016

3
@Gangnus Tôi không nghĩ ai đó 'làm rõ' điểm bạn đang cố gắng thực hiện vì hoàn toàn rõ ràng rằng tệp không thực sự bị xóa khỏi đĩa hoặc kho lưu trữ. Câu trả lời này chỉ định thứ tự thời gian của các lệnh. Nó không bí ẩn hoặc không được giải thích như nhận xét của bạn sẽ đề xuất.
Anthony

Nhận xét của @Edward Newell như trong câu trả lời ở trên cũng áp dụng ở đây: "điều này sẽ xóa tệp khỏi theo dõi, bảo quản cục bộ, nhưng khiến nó bị xóa đối với bất kỳ ai kéo ".
ToJo

26

Như đã chỉ ra trong các câu trả lời khác, câu trả lời được chọn là sai.

Câu trả lời cho một câu hỏi khác cho thấy rằng nó có thể là bỏ qua công việc sẽ được yêu cầu.

git update-index --skip-worktree <file>

2
Không, không thực sự: --skip-worktreeđược sử dụng để giữ tệp trên kho lưu trữ nhưng ngừng theo dõi các thay đổi của nó . Như câu trả lời của bạn nói: --skip-worktree rất hữu ích khi bạn hướng dẫn git không chạm vào một tệp cụ thể bao giờ vì các nhà phát triển nên thay đổi nó
Erdal G.

4
@ErdalG. Chính xác. Theo câu hỏi, họ muốn bỏ qua mọi thay đổi trong tệp nhưng giữ tệp trong repo
the_new_mr

Đồng ý với @the_new_mr --assume-unchanged--skip-worktreecó hiệu lực tương tự nhưng mục đích của chúng hoàn toàn khác nhau. Cái trước là để tăng tốc hiệu suất git bằng cách đánh lừa git không kiểm tra các tệp cụ thể , trong khi cái sau là để bỏ qua các thay đổi trong tương lai trên các tệp cụ thể , phù hợp với thời gian chạy nhưng các tệp thiết yếu.
Victor Wong

22

Để tiết kiệm thời gian, các quy tắc bạn thêm vào .gitignore của bạn có thể được sử dụng để xóa nhiều tệp / thư mục tức là

git rm --cached app/**/*.xml

hoặc là

git rm --cached -r app/widgets/yourfolder/

Vân vân


Đây là một giải pháp rất tốt gây ra trong bất kỳ cơ hội nào bạn muốn sửa chữa gitignore từng bước
cutiko

15

Để ngăn chặn giám sát một tập tin bằng git

git update-index --assume-unchanged [file-path]

Và để hoàn nguyên nó trở lại sử dụng

git update-index --no-assume-unchanged [file-path]

Một repo để giới thiệu cho các trường hợp sử dụng tương tự https://github.com/awslabs/git-secrets


1
Mẹo đảo ngược là một cứu tinh, cảm ơn!
Hamman Samuel

9

Rất nhiều người khuyên bạn nên sử dụng git update-index --assume-unchanged . Thật vậy, đây có thể là một giải pháp tốt, nhưng chỉ trong ngắn hạn.

Những gì bạn có thể muốn làm là đây : git update-index --skip-worktree.

(Tùy chọn thứ ba mà bạn có thể không muốn là : git rm --cached. Nó sẽ giữ tệp cục bộ của bạn, nhưng sẽ được đánh dấu là đã xóa khỏi kho lưu trữ từ xa.)

Sự khác biệt giữa hai lựa chọn đầu tiên?

  • assume-unchangedlà tạm thời cho phép bạn ẩn các sửa đổi từ một tệp. Nếu bạn muốn ẩn các sửa đổi được thực hiện đối với một tệp, sửa đổi tệp, sau đó kiểm tra một nhánh khác, bạn sẽ phải sử dụng no-assume-unchangedsau đó có thể bỏ qua các sửa đổi.
  • skip-worktree sẽ theo bạn bất cứ chi nhánh nào bạn thanh toán, với các sửa đổi của bạn!

Trường hợp sử dụng của assume-unchanged

Nó giả định rằng tập tin này không nên được sửa đổi và cung cấp cho bạn một đầu ra sạch hơn khi thực hiện git status. Nhưng khi kiểm tra đến một chi nhánh khác, bạn cần đặt lại cờ và cam kết hoặc bỏ qua các thay đổi trước đó. Nếu bạn kéo tùy chọn này được kích hoạt, bạn sẽ cần giải quyết xung đột và git sẽ không tự động hợp nhất. Nó thực sự chỉ ẩn các sửa đổi (git status sẽ không hiển thị cho bạn các tệp được gắn cờ).

Tôi thích sử dụng nó khi tôi chỉ muốn dừng theo dõi các thay đổi trong một thời gian + cam kết một loạt các tệp ( git commit -a) liên quan đến cùng một sửa đổi.

Trường hợp sử dụng của skip-worktree

Bạn có một lớp thiết lập chứa các tham số (ví dụ: bao gồm cả mật khẩu) mà bạn bè của bạn phải thay đổi tương ứng với thiết lập của họ.

  • 1: Tạo phiên bản đầu tiên của lớp này, điền vào các trường bạn có thể điền và để trống / rỗng.
  • 2: Cam kết và đẩy nó đến máy chủ từ xa.
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: Cập nhật lớp cấu hình của bạn với các tham số của riêng bạn.
  • 5: Quay trở lại để làm việc trên một chức năng khác.

Những sửa đổi bạn làm sẽ theo bạn bất cứ chi nhánh nào. Cảnh báo: nếu bạn bè của bạn cũng muốn sửa đổi lớp này, họ phải có cùng thiết lập, nếu không các sửa đổi của họ sẽ được đẩy sang kho lưu trữ từ xa. Khi kéo, phiên bản từ xa của tệp sẽ ghi đè lên tệp của bạn.

Tái bút: làm cái này hay cái khác, nhưng không phải cả hai vì bạn sẽ có tác dụng phụ không mong muốn. Nếu bạn muốn thử một lá cờ khác, bạn nên vô hiệu hóa cái sau trước.


7

Để yêu cầu Git không theo dõi các thay đổi đối với tệp / thư mục cục bộ của bạn (có nghĩa là trạng thái git sẽ không phát hiện các thay đổi đối với nó), hãy làm:

git update-index --skip-worktree path/to/file

Và để yêu cầu Git theo dõi các thay đổi cho phiên bản địa phương của bạn một lần nữa (để bạn có thể cam kết các thay đổi), hãy làm:

git update-index --no-skip-worktree path/to/file

1

một dòng trả lời git update-index --assume-unchanged [path]

Sử dụng điều này bất cứ khi nào bạn có một tệp nằm trong repo trung tâm và cả repo cục bộ. Bạn cần thực hiện các thay đổi trong tệp đó nhưng không được dàn dựng / cam kết với repo trung tâm. Tập tin này không nên được thêm vào .gitignore. bởi vì những thay đổi mới trong tệp nếu được giới thiệu bởi quản trị viên hệ thống, nhà phát triển cấp cao cần được phân phối giữa tất cả các repos cục bộ.

Ví dụ tốt nhất: tệp cấu hình cho các kết nối DB . Trong một repo trung tâm, bạn sẽ có tất cả tên người dùng, mật khẩu, máy chủ, cổng với các giá trị của máy chủ DB sản xuất. Nhưng trong dev cục bộ, bạn chỉ nên sử dụng một máy chủ DB phát triển cục bộ hoặc bất kỳ máy chủ DB nào khác (nhóm của bạn đã thiết lập). Trong trường hợp này, bạn muốn thực hiện thay đổi trong tệp cấu hình nhưng không nên cam kết với repo trung tâm.

Tốt


0

Tôi giả sử rằng bạn đang hỏi cách xóa TẤT CẢ các tệp trong một thư mục cụ thể hoặc thư mục bin, thay vì chọn từng tệp riêng biệt.

Bạn có thể sử dụng lệnh này:

git rm -r -f /<floder-name>\*

Đảm bảo rằng bạn đang ở trong thư mục mẹ của thư mục đó.
Lệnh này sẽ, "đệ quy" xóa tất cả các tệp trong bin / hoặc build / thư mục. Theo từ xóa, tôi có nghĩa là git sẽ giả vờ rằng các tệp đó bị "xóa" và các tệp đó sẽ không được theo dõi. Git thực sự đánh dấu các tập tin ở chế độ xóa.

Hãy chắc chắn rằng bạn đã có .gitignore sẵn sàng cho các cam kết sắp tới.
Tài liệu: git rm


0

Vấn đề có thể được gây ra bởi thứ tự hoạt động. Nếu bạn đã sửa đổi .gitignore trước, sau đó git rm --cached xxx, bạn có thể phải tiếp tục gặp phải sự cố này.

Giải pháp đúng

  1. git rm - đã được xxx
  2. đã sửa đổi .gitignore

Trật tự bất biến!

.Gitignore tải lại sau khi sửa đổi!


0

Tôi giả sử rằng bạn đang cố xóa một tệp khỏi git tacking. cho rằng tôi muốn giới thiệu dưới đây lệnh.

git update-index - không thay đổi

Ex - git update-index --assume-không thay đổi .gitignore .idea / Trình biên dịch


0

Để bỏ qua mọi thay đổi đối với tất cả các tệp (thuộc một loại nhất định) trong một thư mục, tôi phải kết hợp một số cách tiếp cận này, nếu không thì các tệp được tạo nếu chúng không tồn tại trước đó.

Trong phần bên dưới, "Elimir" là tên của thư mục mà tôi muốn không xem các thay đổi.

Đầu tiên, xóa mọi tệp mới hiện có khỏi bộ đệm theo dõi thay đổi của bạn (mà không xóa khỏi hệ thống tệp của bạn).

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

Bạn có thể làm tương tự với modified:. renamed:phức tạp hơn một chút, vì bạn sẽ phải xem ->bit bài đăng cho tên tệp mới và thực hiện ->bit trước như được mô tả deleted:bên dưới.

deleted: các tệp chứng minh phức tạp hơn một chút, vì dường như bạn không thể cập nhật chỉ mục cho một tệp không tồn tại trên hệ thống cục bộ

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

Lệnh cuối cùng trong danh sách trên sẽ xóa các tệp khỏi hệ thống tệp của bạn, vì vậy hãy bỏ qua nó.

Sau đó, chặn theo dõi thay đổi từ thư mục đó

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

0

Một cách tiếp cận gần như không có lệnh git đã được đưa ra trong câu trả lời này :

Để bỏ qua các tệp nhất định cho mỗi repo cục bộ :

  1. Tạo một tập tin ~/.gitignore_global, ví dụ bởi touch ~/.gitignore_globaltrong thiết bị đầu cuối của bạn.
  2. Chạy git config --global core.excludesfile ~/.gitignore_globalmột lần.
  3. Viết đường dẫn tệp / thư mục bạn muốn bỏ qua ~/.gitignore_global. ví dụ modules/*.H, sẽ được giả sử là trong thư mục làm việc của bạn, tức là $WORK_DIR/modules/*.H.

Để bỏ qua các tệp nhất định cho một repo cục bộ duy nhất :

  1. Thực hiện bước thứ ba ở trên cho tệp .git/info/excludetrong repo, đó là ghi đường dẫn tệp / thư mục bạn muốn bỏ qua .git/info/exclude. ví dụ modules/*.C, sẽ được giả sử là trong thư mục làm việc của bạn, tức là $WORK_DIR/modules/*.C.

0

Áp dụng .gitignore cho hiện tại / tương lai

Phương pháp này áp dụng hành vi .gitignore tiêu chuẩn và không yêu cầu chỉ định thủ công các tệp cần bỏ qua .

Không thể sử dụng --exclude-from=.gitignorenữa: / - Đây là phương pháp được cập nhật:

Lời khuyên chung: bắt đầu với một repo sạch - mọi thứ đã cam kết, không có gì đang chờ xử lý trong thư mục hoặc chỉ mục làm việc và tạo bản sao lưu !

#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"

#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

Nếu bạn cũng cần xóa các tệp mới bị bỏ qua khỏi lịch sử cam kết của chi nhánh hoặc nếu bạn không muốn các tệp mới bị bỏ qua bị xóa khỏi các lần kéo trong tương lai , hãy xem câu trả lời này .


-1

Sau khi tìm kiếm một thời gian dài, tìm cách làm điều này. bí danh một lệnh git trong .gitconfig.like trong dự án studio android , trước khi kiểm tra tập tin cấu hình lại nhánh cấu hình và sau đó bỏ qua nó , sau khi chi nhánh kiểm tra sử dụng sedtập tin cấu hình thay đổi thành cấu hình cục bộ của tôi. checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.