2010-09-10 21 views
8

Tôi có một kho lưu trữ cho một ứng dụng mà tôi đang làm việc trên đó bao gồm một tệp cấu hình. Hiện tại, tôi phân phối với tiện ích mở rộng là .dist và yêu cầu người dùng đổi tên tệp trước khi chỉnh sửa.Thêm tệp cấu hình bị bỏ qua vào git repo làm mẫu

nate:~/myAwesomeApp% git ls-files 
.gitignore 
README 
config.dist 
glorious_support_lib.p 
bestProgramEvar.f90 

Điều này là tốt và dandy và cấu hình thực tế bị bỏ qua.

nate:~/myAwesomeApp% cat .gitignore 
config 

Sẽ ngọt Tuy nhiên, nếu tôi chỉ có thể phân phối mà tập tin cấu hình dưới tên thật của mình và sẵn sàng để chỉnh sửa, trong khi rời khỏi nó lờ đi để một bản sao mới nhân bản của kho có "chức năng" phân phối, và nó không phải là ghi đè, clobbered, hoặc lạm dụng tình dục, và như vậy người dùng không phải lo lắng về đẩy hoặc xuất bản siêu bí mật chi tiết cấu hình của họ để interwebs qua một ngoài ý muốn git commit -a -m 'hurrrr derp! oopsies!' && git push

Có cách nào để làm điều này? Có git giữ xung quanh một phiên bản gốc của tập tin được nhân bản ra, nhưng là sau đó bỏ qua?

Tôi chắc chắn điều này đã được yêu cầu trước đó, nhưng đối với cuộc sống của tôi, google-fu của tôi đã không thành công. Đặt học sinh vào sâu, SO.

Trả lời

2

Bạn cũng có thể phiên bản và phân phối:

  • một .gitattributes file tuyên bố một filter driver (chỉ 'config.dist')
  • một kịch bản smudge mà sẽ phát hiện nội dung đó và tạo ra cuối cùng (và riêng tư, như trong "không phiên bản" config tệp)

Bây giờ tôi s uốn một chút những gì một trình điều khiển lọc là về (đó là về sửa đổi nội dung của một tập tin, regardless of its "state", i.e its full path and name). Nhưng nó có thể hoạt động.
Các .gitattributes sẽ chứa:

config.dist filter=generateConfig 

alt text

Và bạn có thể đăng ký kịch bản smudge của bạn (áp dụng trong bước thanh toán khi tạo/cập nhật các thư mục làm việc) như:

git config --global filter.generateConfig.smudge /path/to/generateConfig 
6

Tôi có thể bao gồm tập lệnh 'cài đặt' của một số loại đã sao chép 'config.dist' sang 'config'.

Tôi không nghĩ rằng có một cách để có tệp không bị bỏ qua và bị bỏ qua.

+0

Đó là về cơ bản tôi làm cái gì bây giờ. Nó sẽ chỉ ngọt nếu có một "bỏ qua sau khi cam kết xxxxxx" khả năng. – sleepynate

+0

@sleepynate Có thể một bài đăng cam kết móc kiểm tra cam kết xxxxxx và thêm một cái gì đó để .gitignore? – takeshin

4

Đây là một câu hỏi hay, nhưng AFAIK không có giải pháp git cho việc này.

vài cách giải quyết:

  • cấu hình ứng dụng của bạn để đọc config.dist khi config là không có mặt (ví dụ PHPUnit sử dụng kỹ thuật này)
  • sử dụng xây dựng kịch bản để làm đổi tên cho bạn (ví dụ như kiến ​​hoặc Phing)
  • sử dụng git hooks để đổi tên cấu hình
+0

Tôi nghĩ rằng 'sau khi kiểm tra' chạy trên clone .. nhưng không móc đi xuống với repo trên bản sao ban đầu? Làm thế nào mà nhìn? – sleepynate

+0

@sleepynate Điều này sẽ khó thực hiện. Chỉ cần kiểm tra - móc không được nhân bản với repo trên 'git clone [repo]'. Tôi nghĩ về git móc được sử dụng trong quá trình phát triển. Tôi đã không xem xét nhân bản như một kỹ thuật phân phối của ứng dụng. – takeshin

+0

Xin lỗi. Tôi sẽ chỉnh sửa cho rõ ràng. Điều này dành cho người dùng cuối khi họ sao chép. tôi đã có một 'if [! -e config]; sau đó cấu hình cp config.dist; fi' – sleepynate

1

Như những người khác đã chỉ ra, không có giải pháp kỳ diệu cho điều này trong Git. Và theo như tôi biết, nó giống với các hệ thống điều khiển phiên bản khác. Các móc cũng không có giải pháp ở đây, nếu chúng hoạt động theo cách này, đó sẽ là một mối đe dọa bảo mật nghiêm trọng - chỉ bằng cách nhân bản một repo, một mã độc có thể thực thi trong máy của bạn.

Nhưng để sử dụng ứng dụng của bạn, người dùng phải làm ít nhất một điều nữa ngoài việc sao chép nó bằng git: chạy ứng dụng của bạn.

  • không Nếu sửa đổi tập tin cấu hình là cần thiết cho chạy ứng dụng, sau đó nếu chương trình của bạn không if [ ! -e config ] ; then cp config.dist config ; fi khi khởi động, sau đó cần được IMHO khá đủ. Ngoài ra, bạn nên có cảnh báo bên trong config.dist cho biết bạn không nên sửa đổi tệp này, nhưng thay vào đó hãy tạo một bản sao của tệp đó.

  • Nếu sửa đổi tệp cấu hình bắt buộc, sau đó khởi động chương trình mà không cần tệp cấu hình có thể khởi động một số chế độ cài đặt, yêu cầu người dùng nhập các tùy chọn cấu hình cần thiết và lưu chúng.

  • Khả năng thứ ba là ứng dụng của bạn là không thể để sửa đổi tệp cấu hình khi khởi động (có thể chỉ là một số tệp JavaScript + HTML). Trong trường hợp đó, tôi thấy không có lựa chọn nào khác ngoài việc có một số kịch bản xây dựng riêng biệt hoặc cho phép người dùng chỉ cần thực hiện theo cách thủ công.

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