2012-04-19 19 views
10

Điều tôi muốn làm đã được mô tả trong that question. Nhưng tôi muốn giải quyết vấn đề đó một cách thực tế và chung chung hơn. Vì vậy, việc sử dụng hợp cụ thể như sau:Luồng công việc thực tế để giữ các thay đổi cục bộ không được yêu cầu trong git là gì?

  • Tôi có một số thay đổi cục bộ trong một số file web.config, createDb.sql hoặc trong bất kỳ những người khác
  • Tôi không muốn cam kết các tập tin, vì những thay đổi cụ thể với địa phương của tôi máy chỉ
  • những file phải được phiên bản kiểm soát và thay đổi hơn nữa được thực hiện khá thường xuyên để một số trong số họ (script sql nói riêng), vì vậy tôi muốn nhận thông tin cập nhật đối với những file
  • tôi làm muốn cam kết tất cả các file khác
  • Tôi muốn để có thể làm điều đó mà không ma sát, trong một lệnh (sử dụng posh-git, vì vậy PowerShell được hoan nghênh)

Các liên kết đến giải pháp cho biết sử dụng git add -p và đó là không thực tế, nó là nhàm chán để chọn khối bằng tay tất cả các thời gian hoặc có thể có một cách thuận tiện hơn để làm điều đó?

Ví dụ, một trong những điều sau đây có thể làm việc:

  • nếu có một khả năng lọc các file có trong bản sao làm việc của tôi trước khi thêm chúng vào chỉ mục, một cái gì đó giống như git -add -A -EXCEPT web.config crateDb.sql. Sau đó, tôi có thể lập bản đồ một bí danh git cho điều đó và đó là nó.
  • nếu có khả năng loại bỏ stash. Tôi muốn xóa các thay đổi được chứa trong một stash cụ thể từ bản sao làm việc. Vì vậy, tôi sẽ phải làm một cái gì đó như git stash -deapply trước mỗi cam kết cũng tốt.

Vấn đề rất phổ biến và thật kỳ lạ là hiện không có giải pháp nào. Ví dụ. TortoiseSVN có tính năng "bỏ qua-cam kết", Perforce cho phép lưu trữ loại thay đổi cục bộ đó trong một danh sách thay đổi riêng và không bao giờ gửi ...

Bất kỳ suy nghĩ nào?

+0

Bạn có thể "kiểm soát phiên bản" những tệp khác ngoài cam kết thay đổi như thế nào? Trong git, cam kết _is_ local và _push_ ảnh hưởng đến các máy tính/repos khác. Với tôi, mùi này giống như một giải pháp tốt hơn là cái gì đó như [this] (http://stackoverflow.com/questions/6009/how-do-you-deal-with-configuration-files-in-source-control). –

+0

Tôi có một giải pháp tốt hơn cho các tập tin cấu hình - [NConifig] (https://github.com/Yegoroff/NConfig), nhưng vấn đề là tôi không chỉ có tập tin cấu hình. – Restuta

Trả lời

10

Bạn có thể thử làm như sau trước khi git của bạn cam kết:

git update-index --assume-unchanged web.config crateDb.sql 

Từ git giúp đỡ:

--assume-không thay đổi

--no-assume- không thay đổi

Khi các cờ được chỉ định, tên đối tượng được ghi lại cho các đường dẫn không được cập nhật. Thay vào đó, các tùy chọn này được đặt và bỏ đặt bit "giả định không thay đổi" cho các đường dẫn. Khi "giả định không đổi" bit được bật, git dừng kiểm tra các tệp cây đang hoạt động cho các sửa đổi có thể, do đó bạn cần phải tự đặt bit để cho biết git khi bạn thay đổi tệp cây đang hoạt động.Điều này đôi khi hữu ích khi làm việc với một dự án lớn trên một hệ thống tệp có rất chậm lstat (2) cuộc gọi hệ thống (ví dụ: cifs).

Tùy chọn này cũng có thể được sử dụng như một cơ chế tập tin cấp thô đến bỏ qua những thay đổi không bị giam trong các tập tin được theo dõi (tương tự như những gì .gitignore làm cho các tập tin untracked). Git sẽ không thành công (yêu cầu) trong trường hợp cần để sửa đổi tệp này trong chỉ mục, ví dụ: khi sáp nhập trong một cam kết; do đó, trong trường hợp tệp giả định không được sửa đổi được thay đổi ngược dòng, bạn sẽ cần để xử lý tình huống theo cách thủ công.

+0

Làm thế nào git sẽ hành xử sau đó? Nó vẫn sẽ theo dõi những tập tin đó? Nếu tôi sẽ nhận được một bản cập nhật sẽ xảy ra? – Restuta

+0

+1 Điều này giải quyết được vấn đề. – ralphtheninja

+1

@Restuta Các tệp sẽ vẫn được theo dõi bởi git, nhưng git sẽ tạm thời coi chúng là không thay đổi, ngay cả khi chúng đã thay đổi. Vì vậy, trạng thái git etc sẽ không báo cáo các tệp đang được thay đổi. Sử dụng --no-giả-không thay đổi để hoàn tác lệnh và để git quan tâm đến các thay đổi một lần nữa. – ralphtheninja

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