2009-04-14 27 views
8

Tôi đã vô cùng nghịch ngợm. Tôi đã phát triển một phần mềm (tôi là nhà phát triển duy nhất) trong một thời gian ngắn (O.K., đã qua một vài năm), nhưng chưa sử dụng bất kỳ loại điều khiển nguồn nào.Làm cách nào để chuyển đổi các dự án được kiểm soát nguồn không đơn giản thành một kho lưu trữ git được phiên bản?

Tôi đã giải quyết để sử dụng kiểm soát nguồn (git dường như rất có thể, vì các công cụ cửa sổ dường như đã diễn ra rất nhiều trong vài tháng qua) kể từ bây giờ. Những gì tôi có là ngày sao lưu toàn bộ thư mục của giải pháp (.NET) của tôi.

Điều tôi muốn làm là tự động sao lưu các bản sao lưu của mình trong lịch sử sửa đổi. Nó sẽ lộn xộn. Các dự án và tệp sẽ được thêm/xóa trong quá trình sử dụng giải pháp. Tôi không bận tâm về những vấn đề như những gì tôi biết được đổi tên tập tin đang được hiểu là loại bỏ một tập tin và bổ sung một mới, không liên quan.

Thông thường, vấn đề của tôi là: Tôi có các bản sao có thứ tự thời gian của một thư mục thay đổi. Nhập khẩu đầu tiên vào git là dễ dàng tôi giả định. Nhưng, sau đó tôi muốn tất cả các bản sao tiếp theo của thư mục được hợp nhất, theo thứ tự ngày, mỗi lần một mà không cần phải cam kết mọi thư mục con và tệp riêng lẻ.

Điều này có thể xảy ra hay chỉ là tôi bị phạt vì không sử dụng điều khiển nguồn từ phần mềm tắt?

Chỉnh sửa: Nếu tôi tiếp tục với phương pháp 'cam kết tất cả ảnh chụp nhanh một cách thủ công' (có ít hơn 20 ảnh chụp nhanh), có cách nào (như Esko Luontola gợi ý tôi có thể muốn) ghi đè ngày cam kết với ngày tôi có cho ảnh chụp nhanh. git commit dường như không có cờ để cho phép điều này. Có cách nào khác (tôi đang sử dụng Vista)?

Chỉnh sửa: Để trả lời cho vấn đề sử dụng ngày gốc: Bạn phải đặt biến môi trường GIT_AUTHOR_DATE và/hoặc GIT_COMMITER_DATE để ghi đè việc sử dụng ngày giờ hiện tại khi thực hiện cam kết.

Lý do có hai bộ biến (cũng có GIT_ (AUTHOR | COMMITER) _ (NAME | DATE | EMAIL)) là để phân biệt giữa, giả sử tác giả gửi email bản vá và người duy trì thực sự thực hiện các cam kết vào repo. Lưu ý nếu sử dụng phần mở rộng git trên VS: Nếu bạn đặt (export varname = "value") các biến này bằng cách sử dụng dòng lệnh 'git bash', và sau đó chuyển trở lại GUI để thực hiện cam kết, có vẻ như bỏ qua chúng. Bạn phải ở lại trên dòng lệnh và chạy 'git commit' từ đó.

+0

Bạn có muốn có ngày thực tế trong kho lưu trữ Git không? Ít nhất họ đã làm một cái gì đó như thế khi di chuyển 20 năm lịch sử Perl vào Git: http://github.com/blog/276-perl-mirror-on-github –

+0

Không liên quan: di chuyển lịch sử Perl vào Git được nhập từ Perforce –

Trả lời

5

Có thể có một cách đã tự động làm điều này, nhưng git nên đủ thông minh để cho bạn git init trong sao lưu lâu đời nhất của bạn và sau đó liên tục sao chép các thư mục .git để sao lưu từng bước mới hơn và tạo ra một cam kết với tất cả mọi thứ cho mỗi một. Việc viết kịch bản này khá dễ dàng.

Thậm chí tốt hơn, bạn có thể chuyển tùy chọn --git-dir= hoặc biến môi trường $GIT_DIR thành git và sử dụng kho lưu trữ, lưu bước sao chép.

Something như thế này:

cd $FINAL_DIR 
git init 

export GIT_DIR=$FINAL_DIR/.git 

cd $NEXT_BACKUP 
git add -A . 
git commit 
# rinse and repeat 
+0

Tôi muốn đề nghị sử dụng "git add -A". và không cho "-a" để git cam kết, nó có vẻ hơi rõ ràng hơn ... nếu phiên bản git của bạn thêm hỗ trợ -A, đó là. Ngoài ra, "git add." tiếp theo là "git add -u" (để theo dõi cả tệp mới và tệp đã xóa). – araqnid

3

Tôi hoàn toàn không biết lý do tại sao bạn không muốn chỉ cam kết tất cả các bức ảnh chụp riêng rẽ. Tôi có nghĩa là, một kịch bản shell (hoặc Perl, Python, Ruby, Tcl, bất cứ điều gì) để làm điều đó, có lẽ ít hơn 5 dòng mã và ít hơn 10 phút làm việc.

Ngoài ra, có git load-dirs, điều này cho phép bạn cắt giảm xuống còn 3 dòng và 5 phút.Nhưng bạn vẫn phải tải mọi thư mục một cách vô tình.

Tuy nhiên, nếu bạn có khuynh hướng như vậy, có công cụ git fast-import được thiết kế để làm cho việc chuyển đổi lưu trữ bằng văn bản và các nhà nhập khẩu dễ dàng hơn. Theo manpage, bạn có thể viết một nhà nhập khẩu trong khoảng 100 dòng và một vài giờ.

Tuy nhiên, tất cả điều này bỏ qua các vấn đề lớn nhất: các giá trị của một VCS nằm không trong nội dung - bạn chỉ cũng có thể sử dụng sao lưu thường xuyên cho điều đó - nhưng trong các thông điệp cam kết. Và không có công cụ ma thuật nào giúp bạn ở đó, bạn sẽ phải nhập tất cả vào chính mình ... và quan trọng hơn, bạn sẽ phải nhớ chính xác lý do tại sao bạn đã thực hiện mọi thay đổi nhỏ trong những năm qua.

+1

Có các kịch bản lệnh nhập nhanh ví dụ trong contrib/fast-import /, bao gồm import-zips.py (bằng Python) và import-tars.perl (trong Perl). –

+1

-1 Tôi không nghĩ câu trả lời này là hữu ích, nó giống như "dude bạn là một thằng ngốc nó rất dễ dàng chỉ cần làm nó sheesh tôi có thể làm điều đó trong 2 phút với đôi mắt của tôi đóng cửa" – hasen

7

Bạn có thể sử dụng ví dụ git-fast-import công cụ dựa trên phân phối trong kho git.git: import-zips.py(bằng Python) hoặc import-tars.perl(trong Perl), hoặc sử dụng những kịch bản như một cơ sở của kịch bản nhập khẩu của riêng bạn. Bạn có thể tìm thấy các tập lệnh đó trong thư mục contrib/fast-import/.

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