2010-09-30 14 views
17

Tôi có một kho lưu trữ trống và hai bản sao làm việc - một trên máy của tôi, một bản trên máy chủ.
Hóa ra tôi phải .gitignore một tệp nhất định phải cụ thể cho mọi máy. Hãy gọi nó là 'settings.py'. Tệp này đã được cam kết.Làm cách nào để .gitignore và xóa tệp đã cam kết mà không ảnh hưởng đến các bản sao làm việc khác?

Tôi đã đặt 'settings.py' vào .gitignore để bỏ qua nó. Khi tôi bây giờ thay đổi các tập tin về hiện trạng git máy của tôi vẫn nói với tôi

modified: settings.py 

tôi đã tìm ra rằng tôi phải loại bỏ settings.py như thế này:

git rm --cached settings.py 

Sau đó git add ., tiếp theo là git commit.

Nhưng khi bây giờ tôi đẩy điều này vào kho trống và kéo nó vào bản sao đang hoạt động trên máy chủ, settings.py sẽ bị xóa ở đó - điều này là xấu bởi vì tôi phải giữ số settings.py cụ thể này.

Tôi nhận thấy rằng tôi chỉ có thể tạo một bản sao settings.py và đặt nó trở lại sau khi bị xóa, nhưng tôi cảm thấy như phải có cách tốt hơn để thực hiện việc này.

Trả lời

8

Bạn có thể yêu cầu git bỏ qua hoàn toàn các thay đổi đối với tệp được theo dõi mà không phải xóa chúng. Sử dụng lệnh này:

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

Sau đó, nếu bạn muốn theo dõi các tập tin sau:

git update-index --no-assume-unchanged [FILENAME] 
7

bạn có thể thay giữ settings.py bị xóa vĩnh viễn (cả trong nước và trên xa), và:

  • phiên bản một tập tin setting_remote cho phía xa
  • phiên bản một tập tin setting_local cho phía địa phương (ví dụ: với cài đặt cụ thể tại địa phương)
  • thêm filter driver có thể tạo lại quyền settings.py tệp khi thanh toán.

alt text

Bằng cách đó, settings.py được giữ "private" (không phiên bản). Nhưng các giá trị cụ thể cho mỗi môi trường được phiên bản, mỗi giá trị được đặt trong tệp riêng của nó, mà không có bất kỳ vấn đề hợp nhất nào.