2011-11-30 34 views
6

Tôi muốn bao gồm tệp nguồn (có tệp được phân phối khi ai đó nhân bản một kho lưu trữ) trong kho lưu trữ của tôi nhưng có thay đổi đối với nó bị bỏ qua theo mặc định.git Bao gồm một tệp nhưng có những thay đổi của nó không bị lược bớt

git update-index --assume-unchanged ... không hoạt động vì chỉ áp dụng cho chỉ mục cục bộ. Tôi muốn tất cả người dùng có tệp được đề cập bị bỏ qua theo mặc định.

.gitignore không hoạt động vì nếu tôi theo dõi tệp qua git add -f .. thì thay đổi sẽ được theo dõi.

Tôi đang cố gắng đạt được điều sẽ xảy ra nếu tôi svn add chỉnh sửa tệp sau đó svn:ignore chỉnh sửa.

EDIT:

Nó trông như thế này chỉ là không thể trong Git và tôi đã thay đổi tổ chức tập tin nguồn và xây dựng mà dựa vào hành vi Subversion cũ này.

Ví dụ:

$ git clone [email protected]:gsmith/sandbox.git 
snip... 
$ cd sandbox/ 
$ ls -a 
. .. .git .gitignore gitignored tracked 
$ cat .gitignore 
gitignored 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: gitignored 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Tôi muốn tập tin này để được bỏ qua.

$ git reset --hard HEAD 
HEAD is now at 34b1f3d initial setup 
$ git rm gitignored 
rm 'gitignored' 
$ git commit -m "test" 
[master cd8199d] test 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 100644 gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 
$ ls -a 
. .. .git .gitignore tracked 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

Bây giờ nó bị bỏ qua. Tuy nhiên, ai đó nhân bản kho lưu trữ sẽ không nhận được nội dung của gitignored.

+0

Không có '.svnignore', chỉ thuộc tính svn: ignore – manojlds

+0

@manojlds, cảm ơn, tôi đã sửa câu hỏi. –

Trả lời

0
  1. Thêm tệp vào repo cụ thể .gitignore của bạn.
  2. Nếu nó đã được theo dõi (có thể là trường hợp của bạn), chỉ cần làm git rm --cached myfile.

Hy vọng đó là điều bạn muốn. Nếu không, bạn có thể xem this.

0

Để rephrase tiêu đề của bạn: bạn muốn theo dõi tệp, nhưng có thay đổi đối với tệp đó không được theo dõi. Đó là một mâu thuẫn với âm thanh của nó. Có lẽ bạn có một số tệp được thay đổi theo cách cục bộ không có ý nghĩa đối với người dùng khác của kho lưu trữ, nhưng cũng chứa nội dung mà mọi người cần. Câu trả lời, tất nhiên, không phải là để làm điều đó. Có hai tùy chọn chính:

  • Tách tệp. Một phần là "cục bộ", không cần phải theo dõi, và phần kia là lõi/chia sẻ, chứa mọi thứ mọi người cần, và thường không sửa đổi. Bạn nên tự động tạo tệp địa phương trống/mẫu, tại build/deploy/runtime khi thích hợp.

  • Triển khai tệp dưới dạng mẫu và sau đó để sử dụng, hãy sao chép tệp đó. Bạn sẽ tự động sao chép, tại build/deploy/runtime khi thích hợp.

Dù bằng cách nào, câu hỏi không phải là "làm sao tôi bảo Git không theo dõi tệp này mà tôi vừa bảo nó theo dõi?" nhưng "tại sao tôi lại cố gắng theo dõi và không theo dõi cùng một nội dung?"

+2

Vấn đề là 'theo dõi' trong git có nghĩa là hai điều.1) giữ một bản sao của tệp này trong kho lưu trữ 2) xem các thay đổi đối với tệp này khi tôi cam kết lưu trữ. Câu hỏi liên quan đến việc giữ 1) trong khi xóa 2). Nó không phải là mâu thuẫn, nó không chỉ là một sự phân biệt mà nó tạo ra. –

+0

@WaylonFlinn Đó là một mâu thuẫn trong bối cảnh của Git, đó là những gì câu hỏi là về. Giữ một bản sao trong khi không xem thay đổi dẫn đến nhiều biến chứng, và Git tránh giới thiệu điều đó, bởi vì nó có thể (và thường trong thực tế tốt hơn nhiều) để làm một cái gì đó giống như hai tùy chọn tôi đề nghị. – Cascabel

Các vấn đề liên quan