2011-09-08 38 views
7

Tôi biết rằng bạn có thể sử dụngAssociate một git trống cam kết với các tập tin

git commit --allow-empty 

để đặt một cam kết không có thay đổi tập tin thực tế vào kho.

Vấn đề tôi có là tôi cần để có thể tạo các cam kết trống rỗng được liên kết với các tệp khác nhau trong kho lưu trữ. Nói cách khác, tôi muốn có thể đưa vào một số cam kết trống mà

git log -- <filename> 

sẽ hiển thị cam kết, nhưng tôi không thể tìm ra cách để thực hiện việc này.

Cảm ơn!

+5

Không phải là cam kết trống theo định nghĩa không liên quan đến bất kỳ tệp nào không? Chính xác những gì bạn đang cố gắng để làm? –

+0

@ Jeff: Nó được sử dụng để thực hiện một cam kết rỗng? –

+0

@Carl Tôi đang cố gắng thực hiện một cam kết trống liên quan đến các tệp cụ thể. – Jeff

Trả lời

7

Từ git log --help:

[--] <path>... 
    Show only commits that affect any of the specified paths. 

Bạn muốn git log <path>... để hiển thị một cam kết mà không không ảnh hưởng đến các đường dẫn cụ thể. Đó sẽ không xảy ra.

Tuy nhiên, bạn có thể đặt tên tệp vào thư cam kết và sau đó sử dụng git log --grep=<filename>.

Có thể bạn không muốn nó trong thư cam kết? Sau đó, đặt nó vào ghi chú cam kết: git notes add -m <filename>. Bạn có thể phải viết một kịch bản nhỏ để grep cho các ghi chú, nhưng git đường ống dẫn nước nên làm cho rằng khá dễ dàng.

+0

Tôi không yêu cầu hành vi của 'git log' thay đổi - tôi muốn nó hiển thị đường dẫn bị ảnh hưởng. Những gì tôi đang tìm kiếm là một cách để nói với git xem xét đường dẫn X một đường dẫn bị ảnh hưởng cho một cam kết trống. – Jeff

+1

@Jeff: @drizzd và Carl Norum là khá chính xác - một cam kết trống (theo nghĩa này) * theo định nghĩa * giới thiệu không có thay đổi, vì vậy không có "đường dẫn bị ảnh hưởng". Không có cách nào để làm những gì bạn muốn mà không thay đổi hành vi của 'git log'. –

+0

Tôi không chắc tại sao bạn cũng nhắc đến 'git log', nhưng như tôi đã nói, tôi không yêu cầu thay đổi hành vi của nó. Những gì tôi đã hy vọng là một cách để nói 'git commit' để đánh dấu một số đường dẫn bị ảnh hưởng, ngay cả khi diff khác.Sau đó, tất cả các lệnh con 'git' khác sẽ làm điều đúng về mặt hiển thị đường dẫn bị ảnh hưởng, bao gồm' git log'. – Jeff

5

Lý do điều này không thể thực hiện được đối với git, cam kết là ảnh chụp trạng thái của tất cả các tệp trong dự án tại điểm đó và các tệp bị ảnh hưởng sau này được phỏng đoán bằng cách so sánh cam kết cho cha mẹ của nó. (Các tệp bị ảnh hưởng chỉ là những tệp khác nhau giữa hai tệp.) Vì vậy, không có cách nào để đánh dấu một đường dẫn bị ảnh hưởng một cách giả tạo, bởi vì một cam kết không thực sự lưu trữ thông tin đó trực tiếp.

Một điều bạn có thể làm là thay đổi quyền truy cập tệp (nói, đặt hoặc bỏ đặt nhóm có thể ghi) trên đường dẫn được đề cập - sẽ được ghi lại dưới dạng thay đổi, mặc dù nội dung tệp giống nhau. Và bạn luôn có thể có hai cam kết liền kề - một thay đổi quyền và người kia thay đổi chúng trở lại - nếu bạn không muốn các quyền vẫn bị thay đổi. Đó là một chút lộn xộn, nhưng nó sẽ làm việc, đặc biệt là nếu các điều khoản tập tin không quan trọng trong trường hợp của bạn.

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