Do các ràng buộc lạ bên ngoài, tôi không thể sửa đổi .gitignore của kho lưu trữ của tôi. Có cách nào để bỏ qua các tệp và thư mục khác ngoài sửa đổi tệp .gitignore không? Ngay cả khi nó là một giải pháp toàn cục như cấu hình chung sẽ được áp dụng cho tất cả các kho lưu trữ của tôi.Làm thế nào để bạn làm cho Git bỏ qua các tập tin mà không cần sử dụng .gitignore?
Trả lời
Đừng quên, theo gitignore, rằng có một thứ tự ưu tiên trong "bỏ qua nguồn mẫu" khác nhau mà Git xem xét:
- Patterns đọc từ dòng lệnh đối với những lệnh mà hỗ trợ họ.
- Các mẫu được đọc từ tệp .gitignore trong cùng thư mục với đường dẫn hoặc trong bất kỳ thư mục mẹ nào, với các mẫu trong các tệp cấp cao hơn (đến gốc) bị ghi đè bởi các tệp ở cấp độ thấp hơn. tập tin.
- Mẫu được đọc từ
$GIT_DIR/info/exclude
. - Các mẫu được đọc từ tệp được chỉ định bởi biến cấu hình
core.excludesfile
.
cuối cùng hai có thể là một giải pháp cho vấn đề của bạn, nhưng:
- họ không được nhân rộng cho một kho lưu trữ ở xa
- họ có thể đã mô hình của họ ghi đè bởi các nguồn khác
(Xem thêm điều này SO question)
Hai giải pháp khác liên quan đến việc cập nhật các chỉ mục (git update-index
):
git update-index --assume-unchanged
: xem "Git: untrack a file in local repo only and keep it in the remote repo".
Được đề cập bởi Elijah Lynn trong the comments.- Bạn thậm chí có thể bỏ qua nội dung thư mục: "
git update-index --assume-unchanged
on directory". - Sử dụng
--no-assume-unchange
để đảo ngược hiệu ứng: Xem "Is it possible togit add
a file currently protected byassume-unchanged
?".
- Bạn thậm chí có thể bỏ qua nội dung thư mục: "
Tuy nhiên, khi bạn kiểm một chi nhánh hoặc khi bạn git pull
, mà "bỏ qua" tình trạng có thể được đặt lại. Do đó tùy chọn khác:
git update-index --skip-worktree
; xem:
Sự khác biệt giữa hai được giải thích trong "Git - Difference Between 'assume-unchanged
' and 'skip-worktree
'".
Nếu bạn có thể sửa đổi .git/info/exclude
bạn có thể đặt cùng một quy tắc tại đó. Nhưng tệp đó chỉ nằm trong repo địa phương của bạn.
Có vẻ như điều này có lẽ đặt cược tốt nhất của bạn; chúng ta hãy loại trừ các tệp khỏi kho lưu trữ cục bộ của bạn. – Abizern
Tính năng này hoạt động như thế nào với các mô-đun con? Không có thư mục '.git' nào trong một mô-đun con ... – zakdances
@yourfriendzak thư mục' .git' của submodule thực sự là 'parent_repo/.git/modules/submodule_name'. Vì vậy, bạn sẽ chỉnh sửa 'parent_repo/.git/modules/submodule_name/info/exclude' –
Có ba cách để nói với GIT những file nào để bỏ qua:
- file .gitignore
- $ GIT_DIR/.git/info/loại trừ
- tập tin chỉ để thông qua
core.excludesfile
thiết
Hai điểm sau có thể giải quyết được vấn đề của bạn.
Để biết thêm thông tin, hãy xem gitignore(5).
Bỏ qua những thay đổi cục bộ các tập tin theo dõi: git update-index --assume-unchanged my-file.php
Thôi bỏ qua những thay đổi cục bộ các tập tin được theo dõi: git update-index --no-assume-unchanged my-file.php
nguồn: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
Nếu bạn chỉ muốn có một số tập tin địa phương trong kho lưu trữ và vị trí thư mục con linh hoạt, bạn có thể đặt các tệp của mình trong tracked_dir1/tracked_dir2/untracked_dir/
và sau đó thêm tracked_dir1/tracked_dir2/untracked_dir/.gitignore
với nội dung thích:
*
Tức là
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Bạn có thể sử dụng phương pháp gitignore toàn cầu thay vì sửa đổi một trong dự án https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
- 1. Đường ray mà các tệp cần bỏ qua cho GIT
- 2. Làm thế nào để bỏ qua các tập tin hiện có, cam kết trong git?
- 3. Làm thế nào để bỏ qua các tập tin bắt đầu bằng # trong git
- 4. Làm thế nào bạn có thể chỉ ra các tập tin để bỏ qua trong svn khi sử dụng git và git-svn bridge?
- 5. bỏ qua tập tin nhất định trong tất cả các thư mục sử dụng một tập tin duy nhất .gitignore
- 6. Làm thế nào để bạn bỏ qua khoảng trống khi sử dụng git whatchanged -p?
- 7. .gitignore không bỏ qua tệp
- 8. Làm thế nào để làm cho mercurial bỏ qua tất cả các tập tin ẩn?
- 9. git - bỏ qua tập tin dựa trên chế độ
- 10. Làm thế nào để tự động bỏ qua các tập tin trong grep
- 11. Làm thế nào để làm cho git bỏ qua một nhóm thư mục phụ với mẫu gitignore?
- 12. TFS/Git mở rộng dường như bỏ qua .gitignore
- 13. .gitignore sẽ không bỏ qua thư mục
- 14. Làm thế nào để làm cho git bỏ qua một thư mục trong khi hợp nhất
- 15. Làm cách nào để bỏ qua các mục khi tabbing mà không sử dụng tabindex?
- 16. Làm thế nào để bạn yêu cầu git bỏ qua vĩnh viễn các thay đổi trong một tệp?
- 17. Làm thế nào để sử dụng Sprockets với Sinatra mà không có một tập tin rackup?
- 18. Làm thế nào để áp dụng bản vá `git diff` mà không cần cài đặt Git?
- 19. Làm thế nào để sử dụng Logback trực tiếp mà không cần phải thông qua SLF4J
- 20. Tôi nên cho VCS biết những tập tin nào để bỏ qua khi sử dụng Sphinx cho tài liệu?
- 21. Git: Làm thế nào để bỏ qua một tập tin từ một repo và thêm nó vào một repo khác?
- 22. Không thể hiểu cách gitignore bỏ qua các thư mục
- 23. Làm thế nào để sử dụng Boost :: Spirit :: Lex để lex một tập tin mà không cần đọc toàn bộ tập tin vào bộ nhớ đầu tiên?
- 24. Làm cho git bỏ qua đổi tên
- 25. Chỉ cần làm thế nào để bạn sử dụng TTStyledTextLabel?
- 26. Làm thế nào để làm svn bỏ qua trên một tập tin?
- 27. Làm thế nào để bỏ qua không gian tab trong tập tin cvs eclipse so sánh?
- 28. Làm cho git bỏ qua ngày trong các tệp PDF
- 29. Làm cách nào để bỏ qua các thư mục CVS bằng Git?
- 30. tình trạng git cho thấy một tập tin mà tôi đã liệt kê một cách rõ ràng trong tập tin .gitignore tôi
Bạn có thể sử dụng' update-index --assume-constant' @see http://stackoverflow.com/a/25253144/292408 –
@ ElijahLynn chắc chắn. Bạn cũng có 'update-index --skip-work-tree'. Tôi đã chỉnh sửa câu trả lời để thêm một số liên kết đến câu trả lời cũ của tôi minh họa hai lệnh 'update-index' đó. – VonC
Ngọt ngào, --skip-work-tree rất hữu ích, cảm ơn! –