2010-04-17 25 views
5

Tôi có một bộ sưu tập lớn các tập lệnh cá nhân mà tôi muốn bắt đầu phiên bản bằng Git. Trước đây tôi đã tổ chức mã của mình như sau:Cách tốt nhất để tổ chức một bộ sưu tập lớn các tập lệnh cá nhân bằng git?

~/code/python/projects/ (for large stuff, each project contained in an individual folder) 
~/code/python/scripts/ (single file scripts all contained in this directory) 
~/code/python/sandbox/ (my testing area) 
~/code/python/docs/ (downloaded documentation) 

~/code/java/... (as above) 

Bây giờ tôi sẽ bắt đầu phiên bản mã của mình bằng git, để tôi có thể lịch sử và sao lưu tất cả mã của mình sang máy chủ từ xa.

Tôi biết nếu tôi đang sử dụng SVN, tôi chỉ giữ toàn bộ thư mục "~/code/" trong kho lưu trữ lớn, nhưng tôi hiểu đây không phải là cách hay để làm việc với Git.
Hầu hết các thông tin tôi đã nhìn thấy trực tuyến cho thấy giữ tất cả các thư mục dự án của tôi tại một nơi duy nhất (như trong, không có thư mục riêng biệt cho python hoặc java) với từng dự án chứa kho git riêng của nó, và chỉ đơn giản là có một "đoạn" thư mục chứa tất cả tập lệnh/thử nghiệm tập tin đơn lẻ có thể được chuyển đổi thành dự án vào một ngày sau đó.

Nhưng tôi không chắc mình cảm thấy thế nào về việc hợp nhất tất cả các thư mục mã của tôi thành một khu vực. Có cách nào tốt để giữ các thư mục mã riêng biệt của tôi còn nguyên vẹn hay không đáng để nỗ lực? Có lẽ tôi chỉ được gắn vào các thư mục mã riêng biệt vì tôi chưa bao giờ biết bất kỳ điều gì khác ...

Ngoài ra (như một lưu ý), tôi muốn nhanh chóng có thể xem lịch sử theo trình tự thời gian của tất cả dự án và kịch bản. Vì vậy, tôi có thể xem những dự án mà tôi đã tạo gần đây nhất. Tôi đã từng làm điều này bằng cách giữ một số ở đầu tất cả các dự án của tôi, 002project, 003project.
Có cách tự động hoặc dễ dàng để thực hiện việc này trong git mà không phải thêm số vào tất cả tên dự án không?

Tôi sẵn sàng cho bất kỳ lời khuyên tổ chức mã thực tế hoặc triết học nào mà bạn có. Cảm ơn!!!

Trả lời

5

Tôi biết nếu tôi đang sử dụng SVN, tôi chỉ giữ toàn bộ thư mục "~/code /" trong một kho lưu trữ lớn, nhưng tôi hiểu không phải là một cách hay để làm việc với Git.

Lý do git can ngăn người từ việc duy nhất, kho nguyên khối là bạn không thể sao chép các thư mục con của một kho lưu trữ (như bạn có thể với SVN)

Giả sử bạn có git://blah/somecorp_code.git trong đó có hàng triệu các phiên bản, và là 15GB . Nếu bạn chỉ muốn một thư mục con của mã đó, khó khăn - bạn có thể nhận được tất cả 15GB hoặc không có gì. Đối với mã cá nhân, đây thực sự không phải là một vấn đề - tôi có một kho lưu trữ git "nguyên khối", khoảng 20MB, và tôi có thể vui vẻ sao chép nó trên tất cả các máy tôi muốn sử dụng nó.

Không ai khác sử dụng nó, không ai khác cam kết, và tôi hiếm khi làm được nhiều trong cách phân nhánh. Nó thực sự chỉ sử dụng nó một undo-hệ thống lạ mắt với đồng bộ đẹp và sao lưu từ xa (dự án GitHub tư nhân)

tôi tổ chức nó như sau:

Ở cấp độ thư mục gốc của kho, tôi có một thư mục code (cùng với một thư mục sites, cho các công cụ web-dev - đây là lý do tại sao các kho lưu trữ là 20MB)

Trong thư mục mã, tôi có thư mục cho các ngôn ngữ khác nhau (python, ruby, c vv)

Trong mỗi ngôn ngữ thư mục, tôi ha có hai thư mục, snippetsprojects. Đoạn trích bên trong là một loạt các tệp, bên trong các dự án là một loạt các thư mục.

Các dự án này là điều ngẫu nhiên tôi đã viết, nhưng không thực sự làm việc trên nhiều (dự án đồ chơi, "Tôi tự hỏi nếu tôi có thể ..." - dự án vv)

Nếu đó là một tập tin Python đơn , nó đi kèm theo số code/python/snippets/, nếu có nhiều hơn một tệp, hãy truy cập code/python/projects/{project name}

Khi tôi muốn phát hành công khai một dự án (trên Github, thường), tôi tạo một kho lưu trữ mới, sao chép mã này và đồng bộ hóa với Github.

Kho lưu trữ "dự án đang hoạt động" riêng biệt hiện không liên quan đến kho lưu trữ nguyên khối. Tôi nhìn vào dự án submodule, nhưng nó không dành cho việc sử dụng này - nó được thiết kế để làm cho việc nhân bản phụ thuộc dễ dàng, không quản lý một loạt các kho không liên quan

Tôi có một tập lệnh sử dụng API Github để tự động sao chép tất cả dự án tại địa phương hoặc cập nhật chúng với git pull - nó chỉ là phiên bản độc lập của githubsync.py (Tôi đã hợp nhất github.py vào cùng một tệp).Nó có thể được tìm thấy here as gist/373731

Tôi đã sử dụng githubsync.py để sao chép dự án của mình vào máy tính xách tay và máy tính để bàn ban đầu, và cũng thường xuyên chạy nó bên trong Dropbox, làm bản sao lưu.

+0

Wow, cảm ơn lời giải thích chi tiết! Một câu hỏi về những điều sau đây: "Khi tôi muốn phát hành công khai một dự án (trên Github, thường), tôi tạo một kho lưu trữ mới, sao chép mã này và đồng bộ hóa với Github. Kho lưu trữ 'dự án hiện hoạt' riêng biệt bây giờ là không liên quan đến repo nguyên khối. " Khi bạn tạo dự án hoạt động mới này, bạn có đặt nó bên ngoài thư mục/mã/cá nhân của mình không? Tôi sẽ giả sử nếu không kho lưu trữ mã của bạn sẽ cố gắng thêm thư mục dự án này khi bạn làm một cái gì đó như "git commit -a". Cảm ơn bạn lần nữa! –

+0

@spooky note Yeh, tôi có mã repo cá nhân của tôi trong các dự án '~/code/mycode' và riêng biệt trong' ~/code/{projectname} '- git không xử lý kho lưu trữ trong kho đặc biệt hữu ích, mặc dù tôi nghĩ git nên bỏ qua chúng khi bạn thực hiện 'git commit -a' (không chắc chắn) – dbr

+0

Tuyệt vời, cảm ơn! Tôi sẽ đi với phương pháp này - nó có vẻ thẳng thắn hơn và dễ thực hiện hơn các mô-đun phụ. –

2

Tôi biết nếu tôi đang sử dụng SVN, tôi chỉ giữ toàn bộ thư mục "~/code/" trong kho lưu trữ lớn, nhưng tôi hiểu đây không phải là cách hay để làm việc với Git.

Vâng.
Nhưng một khi bạn đã có kho lưu trữ lớn, bạn cần phải phân biệt các bộ phận trong nó mà sẽ phát triển với vòng đời của mình và tag riêng của họ.
Những sẽ submodules sẽ sanh ra, như bạn nói, một repo git của riêng mình.

Vì vậy, bạn vẫn nhận được:

code 
    .git (main project) 
    python 
    .git (main sub-project for all python-related stuff) 
    project1 
     .git (first submodule) 
    project2 
     .git (first submodule) 
    ... 
    scripts 
     .git (one submodules for all your scripts) 
    sandbox 
     .git (sandbox submodule) 
    docs 
     .git (docs submodule) 
    java 
    .git (main sub-project for all java-related stuff) 
    ... (repeat same organization) 

Lưu ý: các niên đại của tạo các dự án vẫn còn tốt hơn quản lý với một quy ước đặt tên.

Với nhiều submodules, bạn có thể:

  • thực sự sao chép và làm việc trên bất kỳ một phần của bộ sưu tập của bạn mà không nhất thiết phải có được mọi thứ
  • hoặc bạn có thể tái xây dựng các tổ chức cũ bạn đã có trong nơi đầu tiên
Các vấn đề liên quan