Làm cách nào tôi có thể tổ chức kho Git cá nhân?


20

Tôi đang trong quá trình thiết lập tài khoản GitHub với kế hoạch tạo một cặp thư viện mà tôi đã phát triển như một phần của một số dự án iOS gần đây có sẵn miễn phí cho các nhà phát triển iOS khác sử dụng.

Hiện tại tôi không có bản sao lưu ngoài trang web cho hầu hết mã của mình, vì vậy, một phần trong số này, ban đầu tôi nghĩ rằng tôi sẽ tải lên tất cả các dự án cá nhân của mình hoặc ít nhất là tất cả các dự án iOS của tôi, vào kho lưu trữ được lưu trữ trên GitHub riêng tư . Tuy nhiên, tôi có rất nhiều dự án đang ngồi xung quanh, nhiều dự án có giá trị khá thấp (nghĩa là được chuyển thể từ sách và viết cho trải nghiệm học tập). GitHub không chỉ tính phí bởi kho lưu trữ riêng, dường như không có cách nào để tổ chức các kho lưu trữ theo thứ bậc.

Có thứ gì đó tôi thiếu sẽ cho phép tôi sử dụng kho git với hệ thống phân cấp và kiểm tra các phần khi tôi cần chúng / làm việc với chúng, như cách tôi hiện đang làm với SVN?

GitHub (hoặc đối thủ cạnh tranh, như BitBucket) có một số tính năng tổ chức dự án mà tôi đang thiếu không?

Không nói rằng, "cách Git" được chấp nhận chung trong việc xử lý tình huống này (loại bỏ các dự án không nhằm phát hành, lưu trữ ngoại tuyến, kết hợp chúng lại với nhau bằng cách nào đó, v.v.)?

Theo như tôi có thể nói, các lựa chọn của tôi là:

  1. Đặt thư viện trên GitHub, tiếp tục lưu trữ SVN của riêng tôi cho tất cả các dự án khác, sử dụng giải pháp không phải là VCS để sao lưu ngoài trang web (blech),
  2. Đặt các thư viện và phần mềm tôi dự định phát hành trên GitHub (tương ứng là công khai và riêng tư), tiếp tục lưu trữ SVN của riêng tôi cho các dự án mà tôi không quan tâm nhiều và chỉ có thể xem lại để làm mới bộ nhớ của mình về cách triển khai XYZ, quyết định rằng tôi sẵn sàng viết chúng ra nếu nhà tôi nổ tung (gấp đôi),
  3. Đặt mọi thứ vào [GitHub và / hoặc BitBucket], đối phó với việc có một số kho lưu trữ lố bịch bằng cách tìm kiếm những gì tôi cần / duy trì một số bộ con trỏ ngoại tuyến vào tài khoản [GitHub và / hoặc BitBucket] của tôi (ba blech)

2
Tôi tò mò muốn biết có bao nhiêu kho lưu trữ mà chúng ta đang nói ở đây. Bạn có ý nghĩa gì bởi "con trỏ"?
mhulse

vì đây là một câu hỏi cũ, bitbucket cho phép bạn tạo các tổ chức miễn phí và trong đó bạn có thể có các dự án, có thể có kho lưu trữ. Các tổ chức được miễn phí cho một số lượng người dùng nhất định. Bạn có thể quản lý quyền bằng org / project / repo.
xenoterracide

Lưu ý rằng GitHub hiện cung cấp kho riêng tư không giới hạn với các gói trả phí của họ.
Jack

Câu trả lời:


11

bitbucket.org cho phép bạn tạo repos riêng không giới hạn.

Git không cho phép bạn kiểm tra chỉ một số đoạn mã. Vì vậy, bạn sẽ cần phải tạo một repo cho mỗi dự án, hoặc xử lý nhân bản tất cả các dự án. Trong thực tế tôi không thấy có vấn đề gì với việc đưa tất cả các dự án nhỏ của chúng tôi vào một repo duy nhất. Bạn nhân bản nó một lần và bạn đã hoàn thành.

Với Git, bạn không bao giờ phải "kiểm tra" lại mã trừ khi bạn thổi bay repo cục bộ hoặc chuyển sang máy khác. Bạn sẽ chỉ đồng bộ hóa tất cả các thay đổi của bạn.

Tôi có một vấn đề tương tự với một số lượng lớn các kho lưu trữ. Lý do tôi không thể lưu trữ tất cả chúng trong một kho lưu trữ là vì tôi cần phân nhánh các phiên bản khác nhau của mỗi kho lưu trữ. Nó rất khó quản lý.


Đúng, đúng ... Có lẽ tôi không nên gọi GitHub một cách cụ thể, vì tôi sẵn sàng sử dụng BitBucket cho các dự án tư nhân. Chỉnh sửa câu hỏi một chút để làm cho nó ít cụ thể hơn.
Arkaaito

5

Câu trả lời ngắn ...

Đề xuất của tôi: Bắt đầu với các tài khoản công khai trên GitHub và / hoặc Bitbucket (khác?). Ném lên một vài dự án công cộng và bắt đầu sử dụng các công cụ / giao diện. Khi bạn đã cảm nhận được các dịch vụ, thì bạn nên nắm bắt được những hạn chế, ưu điểm và nhược điểm của từng dịch vụ. Từ đó, bạn sẽ có thể chọn con đường tốt nhất để giác ngộ kiểm soát phiên bản. :)


Câu trả lời dài ...

Hiện tại tôi không có bản sao lưu ngoài trang web cho hầu hết mã của mình, vì vậy, một phần trong số này, ban đầu tôi nghĩ rằng tôi sẽ tải tất cả các dự án cá nhân của mình hoặc ít nhất là tất cả các dự án iOS của tôi lên kho lưu trữ được lưu trữ trên GitHub riêng tư . Tuy nhiên, tôi có rất nhiều dự án đang ngồi xung quanh, nhiều dự án có giá trị khá thấp (nghĩa là được chuyển thể từ sách và viết cho trải nghiệm học tập).

Bạn đã xem xét việc cài đặt ứng dụng khách Git của riêng bạn chưa? Nếu bạn đã trả tiền cho việc lưu trữ web, thì có thể sử dụng máy chủ đó để thiết lập Git của riêng bạn.

Ví dụ: máy chủ lưu trữ của tôi là WebFaction (không liên kết):

Cài đặt ứng dụng web Git

Hướng tuyến đường này có thể cho phép bạn tiết kiệm một số $$$, đặc biệt. nếu bạn đã trả tiền cho việc lưu trữ.

GitHub không chỉ tính phí bởi kho lưu trữ riêng tư,

Chỉ cần làm rõ cho những người khác (một lần nữa, không liên kết kinh doanh với GitHub hoặc BitBucket):

GitHub: Kế hoạch & Giá cả

  • $ 7 / tháng. cho tối đa 5 kho riêng , không giới hạn mọi thứ khác.
  • $ 12 / tháng. cho tối đa 10 kho riêng , không giới hạn mọi thứ khác.
  • $ 12 / tháng. cho tối đa 20 kho riêng , không giới hạn mọi thứ khác.

Lưu ý rằng giá "Kế hoạch kinh doanh" là khác nhau.

Giá cho lưu trữ repo Git và Mercurial cho Bitbucket của Atlassian

Như Andrew đã nêu trong câu trả lời khác, Bitbucket chào hàng repos riêng không giới hạn.

  • 5 người dùng: Miễn phí
  • 10 người dùng: $ 10 / tháng.
  • 25 người dùng: $ 25 / tháng.
  • 50 người dùng: $ 50 / tháng.
  • 100 người dùng: $ 100 / tháng.
  • Không giới hạn $ 200 / tháng.

Dường như không có cách nào để tổ chức các kho lưu trữ theo thứ bậc.

Không chắc chắn chính xác những gì bạn có nghĩa là "phân cấp" (có thể vì tôi không quen với SVN).

Tôi không chắc điều này có giúp ích gì không, nhưng bạn có thể nhìn vào bảng so sánh này để xem các lệnh so sánh / khác nhau như thế nào:

Có thứ gì đó tôi thiếu sẽ cho phép tôi sử dụng kho git với hệ thống phân cấp và kiểm tra các phần khi tôi cần chúng / làm việc với chúng, như cách tôi hiện đang làm với SVN?

Phân nhánh?

GitHub (hoặc đối thủ cạnh tranh, như BitBucket) có một số tính năng tổ chức dự án mà tôi đang thiếu không?

Không chắc chắn nếu điều này sẽ giúp, nhưng bạn có thể xem:

Git đi kèm với các công cụ GUI tích hợp để cam kết ( git-gui ) và duyệt ( gitk ), nhưng có một số công cụ của bên thứ ba cho người dùng đang tìm kiếm trải nghiệm dành riêng cho nền tảng.

... một lần nữa, không chắc liệu có bất kỳ công cụ nào trong số đó có thể giúp bạn cảm nhận về những gì có thể không.

Để rõ ràng, tôi không chắc về cấp độ kỹ năng Git của bạn ... nếu bạn chưa quen với Git / GitHub, sử dụng GUI có thể là cách nhanh chóng / dễ dàng để bạn cảm nhận mọi thứ. Cá nhân tôi thích sử dụng ứng dụng GitHub chính thức cho các ứng dụng Mac / Windows.

Không nói rằng, "cách thức" được chấp nhận chung trong việc xử lý tình huống này (loại bỏ các dự án không nhằm phát hành, lưu trữ ngoại tuyến, kết hợp chúng lại với nhau bằng cách nào đó, v.v.)?

Nếu tôi là bạn, tôi sẽ sử dụng kho lưu trữ.

Bạn cần bao nhiêu kho riêng?

Nếu bạn muốn sử dụng GitHub, một giải pháp có thể là lấy gói rẻ nhất và sử dụng một vài repos riêng để giữ tất cả mã thử nghiệm / không công khai của bạn. Bạn chỉ có thể sử dụng cấu trúc thư mục trên mainnhánh của mình để duy trì cấu trúc phân cấp hoặc bạn có thể sử dụng nhiều nhánh để giữ mọi thứ tách biệt hơn.

Mẹo: Nếu bạn đang sử dụng phiên bản Git mới hơn, bạn có thể kéo các nhánh cụ thể bằng cách sử dụng git clone -b mybranch --single-branch git://sub.domain.com/repo.git:

Tôi phải cảnh báo bạn, mặc dù sử dụng các nhánh để tổ chức mã (như thư mục) thực sự không phải là cách tốt nhất để làm mọi thứ (mặc dù, không có gì nói rằng bạn không thể đi theo con đường này).

( Có vẻ như câu trả lời của tôi ở đây để biết thông tin liên quan đến các chi nhánh GitHub. )

Một lần nữa, tôi nghĩ rằng nhiều repos là con đường để đi.

Bạn có thể tự hỏi nếu mã của bạn thực sự cần phải riêng tư; bạn có thể công khai với mã đã nói mà không có bất kỳ hậu quả nào không?

Đặt thư viện trên GitHub, tiếp tục lưu trữ SVN của riêng tôi cho tất cả các dự án khác, sử dụng giải pháp không phải là VCS để sao lưu ngoài trang web (blech),

Nếu bạn đi theo tuyến đường này, Dropbox (hoặc tương tự) có thể là một cách tốt để có được một số hình thức kiểm soát phiên bản và đồng bộ hóa để sao lưu ngoài trang web của bạn.

Đặt các thư viện và phần mềm tôi dự định phát hành trên GitHub (tương ứng là công khai và riêng tư), tiếp tục lưu trữ SVN của riêng tôi cho các dự án mà tôi không quan tâm nhiều và chỉ có thể xem lại để làm mới bộ nhớ của mình về cách triển khai XYZ, quyết định rằng tôi sẵn sàng viết chúng ra nếu nhà tôi nổ tung (gấp đôi),

Điều này đưa tôi trở lại câu hỏi "Bạn đã trả tiền cho việc lưu trữ chưa? Nếu vậy, bạn có thể cài đặt máy chủ Git của riêng mình"; lợi thế là, bạn có thể có tất cả mã nguồn dưới ô Git, ngay cả khi đó không phải là tất cả trên cùng một máy chủ (nghĩa là sử dụng GitHub cho các nội dung công khai mà bạn muốn thể hiện).

Đặt mọi thứ vào [GitHub và / hoặc BitBucket], đối phó với việc có một số kho lưu trữ lố bịch bằng cách tìm kiếm những gì tôi cần / duy trì một số bộ con trỏ ngoại tuyến vào tài khoản [GitHub và / hoặc BitBucket] của tôi (ba blech)

---> Xem câu trả lời ngắn của tôi ở trên. ^ ^ ^ ^ ^ ^ ^


0

Đây là những gì tôi làm:

  • Đặt các dự án độc lập mà bạn muốn công khai trong các repos GitHub riêng biệt . Vì GitHub là thời điểm thực tế để chia sẻ mã, điều đó sẽ làm cho các dự án của bạn dễ khám phá hơn / dễ dàng hơn để rẽ nhánh.
  • Đối với bất kỳ dự án nào bạn muốn giữ riêng tư, hãy đặt chúng trong các kho riêng do nhà cung cấp lựa chọn của bạn lưu trữ. Như đã đề cập, Bitbucket là một lựa chọn tốt cho việc này vì nó cho phép các kho riêng tư không giới hạn.
  • Đặt tất cả các mã khác vào một repo "rác". Điều này có thể bao gồm mã được sử dụng để học tập và kiểm tra cũng như các đoạn nhỏ không thực sự là một phần của dự án. Miễn là không có lý do gì để giữ riêng tư này, bạn cũng có thể lưu trữ repo này trên GitHub.

    Ngoài tất cả các ưu điểm thông thường của kiểm soát phiên bản (mà bạn đã có với SVN), giờ đây mã của bạn đã được sao lưu trực tuyến. Trong trường hợp bất kỳ mã rác nào của bạn biến thành một dự án, bạn có thể chuyển nó thành repo của chính nó.

    Bạn có thể đặt mã này vào các repos riêng hoặc sử dụng một cái gì đó lạ mắt như các mô đun con git hoặc cây con, nhưng tôi thấy dễ dàng nhất là chỉ giữ tất cả trong một repo và sắp xếp nó bằng các thư mục. Nó đơn giản hơn nhiều và git đủ nhanh để kích thước của repo không phải là một vấn đề.


0

Một kỹ thuật có thể là sử dụng các nhánh.

Các chi nhánh trong một repo git chỉ là con trỏ để cam kết, chúng không phải liên quan đến nhau theo bất kỳ cách nào. Vì vậy, bạn có thể tạo một repo "dự án nhỏ" trên dịch vụ lưu trữ và sau đó sử dụng một nhánh trong repo đó cho mỗi dự án. Nếu một dự án nhỏ phát triển, bạn có thể dễ dàng chuyển chi nhánh sang repo của chính nó.

Tại địa phương, bạn có thể giữ các nhánh trong các repos cục bộ riêng biệt (không phải có ánh xạ 1: 1 giữa các repos cục bộ và từ xa) hoặc có một repo cục bộ duy nhất và sử dụng git worktree để duy trì nhiều cây làm việc. Cá nhân tôi nghi ngờ cách tiếp cận đầu tiên ít bị lỗi hơn.


Có chúng được lưu trữ trong cùng một repo từ xa không có nghĩa là bạn phải sử dụng cùng một repo cục bộ.
Peter Green

Chỉ cần quên bình luận cuối cùng của tôi. Tôi vừa tìm hiểu về git worktreelệnh, cho phép bạn tạo các cây công việc bổ sung cho kho lưu trữ, cho phép bạn có một số nhánh được kiểm tra đồng thời. Với điều này, các nhược điểm của phương pháp của bạn về cơ bản biến mất: Chỉ cần tạo một cây công việc cho mỗi nhánh độc lập và sử dụng chúng như các repos độc lập. Có thể là một ý tưởng tốt để thêm câu này vào câu trả lời của bạn :-)
cmaster

@cmaster, xong ...
Peter Green
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.