git cho các dự án cá nhân (một người đàn ông). Quá mức cần thiết?


84

Tôi biết và sử dụng hai hệ thống kiểm soát phiên bản: Subversion và git. Subversion, như bây giờ, được sử dụng cho các dự án cá nhân nơi tôi là nhà phát triển duy nhất và git được sử dụng cho các dự án và dự án nguồn mở mà tôi tin rằng những người khác cũng sẽ làm việc trong dự án. Điều này chủ yếu là do khả năng hợp nhất và hợp nhất tuyệt vời của git, nơi mọi người có thể làm việc trên chi nhánh của chính họ; rất tiện dụng.

Bây giờ, tôi sử dụng Subversion cho các dự án cá nhân, vì tôi nghĩ git không có ý nghĩa gì ở đó. Nó có vẻ là một chút quá mức cần thiết. Nó là ổn đối với tôi nếu nó được tập trung (trên máy chủ nhà của tôi, thường) khi tôi là nhà phát triển duy nhất; Tôi vẫn sao lưu thường xuyên. Tôi không cần khả năng tạo chi nhánh của riêng mình, chi nhánh chính chi nhánh của tôi. Vâng, SVN có hỗ trợ đơn giản để phân nhánh, nhưng hỗ trợ mạnh mẽ hơn nhiều cho nó không có ý nghĩa, tôi nghĩ. Sáp nhập có thể là một nỗi đau với nó, hoặc ít nhất là từ kinh nghiệm nhỏ bé của tôi.

Có bất kỳ lý do tốt để tôi sử dụng git cho các dự án cá nhân, hoặc nó chỉ đơn giản là quá mức cần thiết?


61
Không, tôi sử dụng git và hg cho các dự án cá nhân. Có kiểm soát sửa đổi địa phương là một ơn trời.
wkl

7
Git về nhiều mặt tốt hơn cho tất cả các dự án, cho dù họ có số lượng lớn người đóng góp hay không: git nén công cụ nhiều hơn, hiệu quả hơn nhiều so với svn (và có độ lớn nhanh hơn!), Git sẽ sao lưu dự phòng và git sẽ không là một trở ngại nếu người khác muốn đóng góp.
Artefact2

4
Tôi sử dụng kiểm soát phiên bản để đẩy mã của mình lên github hoặc bitbucket, nó phục vụ cho tôi và có thể một ngày nào đó tôi sẽ thực sự viết một cái gì đó mà mọi người sẽ thực sự quan tâm.
Mahmoud Hossam

8
"Tôi không cần khả năng tạo chi nhánh của riêng mình, chi nhánh chính là chi nhánh của tôi." Rất nhiều người đã nói điều tương tự undokhi đó là một tính năng tương đối mới trong các ứng dụng. Bây giờ mọi người nhận ra rằng họ cần tất cả cùng. Bạn cần phải phân nhánh, bạn không biết điều đó.
Dan Rosenstark

1
@rtperson vâng, bạn có thể làm điều đó, nhưng tôi thực sự thích đồng bóng hơn, mặc dù tôi thích github hơn bitbucket.
Mahmoud Hossam

Câu trả lời:


155

Nó không quá mức cần thiết. Lý do chính khiến tôi bắt đầu sử dụng Git và Mercurial over Subversion cho các dự án cá nhân là việc khởi tạo một kho lưu trữ dễ dàng hơn nhiều.

Bạn muốn bắt đầu một dự án mới?

> git init

BAM! Không cần thiết lập máy chủ kho lưu trữ cũng như kiểm tra cấu trúc thư mục để hỗ trợ phân nhánh và thẻ vào kho lưu trữ lật đổ.

Chia sẻ dự án của bạn sau này chỉ là vấn đề: git push(ngoài việc có một kho lưu trữ từ xa). Hãy cố gắng làm điều đó một cách nhanh chóng với lật đổ!


24
Đã được chấp nhận. Tôi không thể được chứng minh là sai nhiều hơn về việc git bị quá mức hơn thế này;)
Anto

7
Steve341: Tôi thường giữ tất cả các dự án mã nguồn trong một thư mục có tên là "dự án". Đó là nơi tôi giữ tất cả các kho lưu trữ, một kho cho mỗi dự án mã nguồn. Tôi chưa bao giờ có nhu cầu theo dõi một số dự án cùng nhau trong một và cùng một kho lưu trữ VCS; đó là những gì hệ thống quản lý phụ thuộc như Ivy hay Maven dành cho.
Spoike

3
@ Steve341 Thật khó để theo dõi những thứ này? Bạn chỉ có một thư mục chứa tất cả các repos của bạn. Nó không khác gì hệ thống của bạn, ngoài thực tế là hệ thống của bạn là một thực tiễn cực kỳ tồi tệ khi sử dụng git ...
thay thế vào

2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés

2
git initvà bam! Oh yeah và sau đó cp ../the-other-project/.gitignore .trước khi cam kết ban đầu. Bế!
Dan Rosenstark

46

Tôi cho rằng việc sử dụng Subversion cho các dự án cá nhân tại địa phương là quá mức cần thiết, trong khi Git thì quyết định là không. Git sẽ chiếm ít không gian hơn (do khái niệm "sửa đổi" không hiệu quả của SVN so với ảnh chụp nhanh đối tượng của Git), yêu cầu ít thiết lập hơn ( git initso với hàng tá svnadminlệnh và thiết lập quyền, v.v.), dễ dàng sao lưu hơn ( git clone --bare[hoặc git push originnếu bạn sử dụng Github hoặc tương tự] và bạn đã hoàn thành) và có các công cụ tốt hơn để quản lý mã của mình (phân nhánh là miễn phí và việc hợp nhất trở nên dễ dàng và sạch sẽ hơn). Chỉ vì không ai khác có bản sao kho lưu trữ của bạn không có nghĩa là lợi ích của bất kỳ DVCS nào là "quá mức cần thiết".

Hơn nữa, tôi muốn nói rằng hỗ trợ phân nhánh của Git ít phức tạp hơn so với SVN, với phần thưởng lớn hơn.


Tôi đoán tôi nên sử dụng "mạnh mẽ" thay vì "phức tạp"
Anto

3
@Anto: Không quan trọng. Về cơ bản, tôi vẫn nói điều tương tự: Phân nhánh vượt trội của Git đơn giản là không có nhược điểm, so với SVN.
greyfade

3
Git cũng sẽ không "làm ô nhiễm" cây nguồn của bạn với các tệp theo dõi trong mọi thư mục con.
WarrenT

4
@WarrenT "ô nhiễm" cây nguồn không xảy ra trong các phiên bản svn 1.7 trở lên.
vui mừng

4
Tạo kho lưu trữ hệ thống tệp trong Subversion là một lệnh ( svnadmin createcộng với một lệnh để thực hiện kiểm tra hoặc nhập ban đầu), không cần thiết lập quyền, v.v. Tôi không phủ nhận rằng Git thường là một công cụ tốt hơn, nhưng sự thiếu chính xác về Subversion không hữu ích.
Josh Kelley

34

Nghĩ rằng bạn sẽ không bao giờ phân nhánh mã của riêng bạn là một chút thiển cận. Tôi đã phân nhánh mã của mình nhiều lần, đặc biệt khi tôi đang thử nghiệm một cách tiếp cận mới, tôi vẫn chưa hoàn toàn bị thuyết phục. Cuối cùng bạn sẽ muốn các tính năng.

Điều này đến từ một người dùng Subversion lâu dài. Hợp nhất trên một công cụ thực sự có thể giúp làm cho cuộc sống của bạn dễ dàng hơn.


2
Có tôi tin rằng đây là điểm của các chi nhánh, thử nghiệm. Đó là đặt phòng đầu tiên của tôi khi đọc câu hỏi của Op. Nếu bạn không phân nhánh trong kho lưu trữ của mình, bạn đang "phân nhánh" trong đầu và điều này thật vô nghĩa khi bạn có quyền kiểm soát phiên bản.
Chris

3
Bạn có thể phân nhánh với lật đổ. Và hợp nhất. Sắp xếp Trên thực tế, lần duy nhất tôi thử tôi đã kết thúc với một kho lưu trữ bị hỏng mà tôi không thể làm việc được nữa và việc khôi phục từ bản sao lưu (với chi nhánh đã được áp dụng) không giúp ích gì cả, vì vậy tôi đã mất tất cả lịch sử của mình và bắt đầu một kho lưu trữ mới ... nhưng tôi đổ lỗi cho việc chuyển đổi từ 1.4.? đến 1,5 (tôi nghĩ - đó là một vài năm trước đây). Có lẽ phân nhánh và sáp nhập công trình, thực sự. Nếu bạn đủ can đảm để thử nó. Nếu tôi biết về svn kết xuất sau đó, tôi có thể đã khắc phục vấn đề với một số nỗ lực, tất nhiên.
Steve314

@Chris, tôi muốn có một phiên bản hoạt động mà tôi có thể quay lại bất cứ lúc nào. Chắc chắn bạn có thể thực hiện điều đó với các thẻ, nhưng có những lúc một nhánh có ý nghĩa hoàn hảo. Đừng quên những lợi ích khác của git / mercurial.
Berin Loritsch

9

Overkill được dành riêng khi có thiệt hại tài sản thế chấp gây ra bởi "giải pháp". Sử dụng súng để giết ruồi có nghĩa là có thiệt hại do viên đạn đi đến nơi khác. Đó là quá mức cần thiết. Sử dụng một cái gì đó mạnh mẽ hơn mức cần thiết mà không gây ra vấn đề không phải là quá mức cần thiết và có thể là một điều tốt nếu nó giúp bạn hợp lý hóa quá trình phát triển của bạn. Nó không gây hại và cho phép bạn chỉ phải cập nhật một bộ phần mềm thay vì hai. Vậy tại sao phải bận tâm với hai hệ thống thay vì một?


Nó có thể là quá mức cần thiết (vâng, với định nghĩa đó) nếu hệ thống đi vào cách của bạn. Tôi đang tự hỏi liệu có nên sử dụng git cho các dự án cá nhân hay không. Bạn có thể vui lòng cho tôi biết những lợi thế cụ thể là gì? Câu trả lời này không giải quyết điều đó. Tôi thấy git là một hệ thống mạnh hơn và quá mạnh cho các dự án cá nhân. Không nhất thiết phải có bất kỳ tác hại nào trong đó, miễn là nó không cản trở bạn. Có lẽ bạn có thể mở rộng về câu trả lời của bạn?
Anto

1
Overkill cũng được sử dụng khi nỗ lực sử dụng để áp dụng giải pháp vượt quá tỷ lệ. Có thể cho rằng, nếu bạn đã sử dụng lật đổ cho các dự án địa phương, nỗ lực cần thiết để tìm hiểu Git hoặc bất cứ điều gì là quá mức cần thiết. Hoặc có thể là một bài học hữu ích phát triển các kỹ năng chuyển nhượng, tất nhiên. Cá nhân tôi vẫn sử dụng lật đổ - nó cắn tôi vài lần, nhưng chỉ để lại những vết sẹo nhỏ. Tôi quan tâm đến việc học Git, nhưng mỗi lần tôi đi tìm, các hướng dẫn tôi tìm thấy đều khó hiểu hoặc tôi không thể có được các công cụ ổn định cho Windows hoặc có một số rào cản khác khiến mọi thứ dường như, quá mức, quá mức cần thiết.
Steve314

7

Tôi sử dụng Git cho các dự án một người đàn ông của tôi và tôi thích nó. Trước đây tôi đã sử dụng Subversion và tôi chưa thấy nhược điểm khi sử dụng Git. Nó mạnh hơn nhưng không phải theo cách khiến những điều đơn giản trở nên phức tạp hơn. Làm những điều đơn giản phức tạp không cần thiết / tốn kém / chậm / vv. là IMHO một điều kiện cần thiết để gọi một cái gì đó quá mức cần thiết. Ngoài ra, trên Github, tôi đã chia rẽ các dự án một người trước đây của người khác để thêm một tính năng tôi muốn và sau đó gửi cho họ các yêu cầu kéo. Tôi sẽ thấy khá tuyệt nếu ai đó quan tâm đến các dự án của tôi làm điều tương tự.


7

Tôi chưa bao giờ sử dụng kiểm soát nguồn cho các dự án cá nhân trước DVCS, vì vậy thật kỳ lạ khi tưởng tượng ai đó có quan điểm ngược lại. Một số lý do của tôi là:

  • Dễ dàng thiết lập và phá bỏ. Ví dụ, một đồng nghiệp đã đưa cho tôi một câu đố lập trình vào tuần trước mà tôi đã giải được trong vài bước nhỏ. Tôi đã thực hiện một repo git kéo dài tất cả 45 phút để giữ công việc của tôi, và sau đó nó đã biến mất. Tôi không biết việc lật đổ dễ dàng như thế nào, nhưng tôi chưa bao giờ nghe thấy ai làm việc đó.
  • Ngắt kết nối. Đối với tôi, việc có thể làm việc ngoại tuyến mang lại nhiều lợi ích cho một dự án sở thích hơn là một công việc. Tôi không cần phải chọc một lỗ trên tường lửa nhà của tôi hoặc lưu trữ một dự án công khai. Tôi có thể tạm thời đặt repo trên ổ ngón tay cái hoặc máy tính xách tay, và vẫn giữ mọi thứ đồng bộ.
  • Tất cả mọi thứ colocated. Có repo và cây làm việc cùng nhau làm cho các dự án nhỏ dễ dàng theo dõi hơn trong quá trình nâng cấp hệ điều hành.
  • Các tính năng mạnh mẽ. Chắc chắn, tôi không cần năng lượng mọi lúc, nhưng nó ở đó khi tôi cần, và không tiêu tốn bất kỳ tài nguyên nào khi tôi không.

6

Tôi đã được thông báo rằng điều đó git-bisectthực sự tốt khi tìm ra cam kết chính xác đã đưa ra một hành vi nhất định, bằng cách điều hướng qua lại trong các cam kết tùy thuộc vào đầu vào của bạn.

Bạn sẽ phải làm điều đó một ngày nào đó cho những điều bạn chỉ đơn giản là không thể hiểu được chuyện gì đã xảy ra.


EDIT: Ngoài ra, khả năng phân nhánh là rất quan trọng khi bạn phải sửa lỗi trong các phiên bản cũ mà khách hàng sử dụng. Bạn phải có khả năng quản lý "chỉ sửa lỗi nhỏ này nhưng tôi không muốn phiên bản mới nhất vì tôi không muốn kiểm tra lại tất cả bây giờ".


2

Nó phụ thuộc vào mức độ nghiêm trọng mà bạn muốn nhận về phiên bản mã của riêng bạn. Nếu những gì bạn đang xây dựng là một thư viện đơn giản sẽ chỉ có phiên bản hiện tại (hoặc miễn là đúng), cá nhân tôi chỉ sử dụng một tùy chọn sao lưu cơ bản như Dropbox. Nếu bạn mất tất cả mã của mình, bạn có thể khôi phục mã từ web và Dropbox có bản sao lưu 30 ngày nếu bạn thực sự làm điều gì đó ngu ngốc.

Tuy nhiên, nếu bạn cần duy trì các nhánh sản xuất và Dev, thì git hoàn toàn là một công cụ tuyệt vời - và nhanh hơn rất nhiều so với svn. Mặc dù vậy, hãy lưu ý đến nguy cơ lỗi ổ cứng nếu bạn chỉ lưu trữ dữ liệu cục bộ.


1
Vâng, tôi sử dụng DropBox cho các dự án cá nhân. Các phiên bản là hư không gần như phức tạp như một VCS đúng nhưng nó tốt cho các dự án nhỏ hơn tôi làm trong thời gian rảnh rỗi của tôi, và nó đòi hỏi không có ý gì cả (ví dụ như không có cam kết, tập tin chỉ cập nhật khi bạn làm việc với chúng..)
jhocking

ồ và tình cờ vì tôi phát triển trò chơi, các dự án của tôi có xu hướng có nhiều tệp nhị phân (tệp hình ảnh, clip âm thanh, v.v.) và hầu hết các hệ thống kiểm soát phiên bản thực sự chỉ dành cho mã nguồn.
jhocking

Git chỉ hoạt động tốt với các tệp nhị phân, các khác biệt chỉ là ít thú vị hơn. May mắn là khác biệt trong git không bị khóa chính xác - nếu bạn có thể tìm thấy một công cụ khác biệt nhị phân mà bạn yêu thích, bạn có thể sử dụng nó với git khá dễ dàng (từ dòng lệnh)
Chris Moschini

Tôi đã nói rằng Git lãng phí rất nhiều tệp nhị phân phiên bản không gian, nhưng những gì tôi đã nói có thể không chính xác. Về cơ bản, tôi được cho biết rằng hầu hết các tài sản nhị phân (tôi cho rằng không phải tất cả các tệp nhị phân, nhưng hình ảnh và âm thanh đi vào trò chơi) phải được lưu lại hoàn toàn mọi phiên bản và do đó Git lấp đầy ổ cứng của bạn với kho lưu trữ cục bộ.
jhocking

Nó chỉ lãng phí nếu bạn không có ý định phiên bản các tệp nhị phân. Nếu bạn cần phiên bản chúng, thì lịch sử phiên bản sẽ không lãng phí. Tôi nghĩ rằng họ đang vô tình ám chỉ git làm mờ lịch sử phiên bản của nó khi theo dõi nhị phân - điều đó không chính xác. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini

2

Tôi luôn luôn, luôn luôn, luôn sử dụng hệ thống kiểm soát phiên bản cho bất kỳ loại dự án phát triển nào. Lớn hay nhỏ thực sự không thành vấn đề. Cho dù tôi đang chơi ở nhà với một loại công nghệ mới, viết một người trợ giúp nhỏ để giảm bớt cuộc sống của tôi hoặc phát triển chuyên nghiệp trong một nhóm lớn và phân tán - tôi luôn muốn có một hệ thống kiểm soát phiên bản để hỗ trợ tôi.

Chắc chắn, hầu hết thời gian cho các dự án cá nhân nhỏ bạn sẽ không sử dụng hầu hết các tính năng, nhưng thiết lập kho lưu trữ git (hoặc thậm chí là kho lưu trữ Subversion cục bộ) không phải là vấn đề lớn, vì vậy hãy thực hiện nó! Và trước khi bạn biết điều đó, bạn sẽ muốn biết "chết tiệt, nội dung của tệp X vào thứ sáu tuần trước là gì?". Không có kiểm soát phiên bản - chúc may mắn ;-)

Vì vậy, thực sự không có vấn đề gì nếu bạn sử dụng git hoặc SVN - cá nhân tôi bắt đầu di chuyển ngày càng nhiều thứ từ SVN sang git nhưng điều chính là sử dụng kiểm soát phiên bản - ngay cả đối với những điều nhỏ nhặt.


1

Chỉ bởi vì không ai đã đề cập đến nó: đối với các dự án cá nhân, darcs thực sự tốt và ít tham gia hơn git để thực hiện kiểm soát phiên bản đơn giản. Nó không nhanh như các dự án lớn hơn, nhưng sau đó, Subversion cũng không!


1
Nghe có vẻ liên quan đến việc bạn biết darcs như thế nào. Tôi chưa bao giờ sử dụng nó nhưng đã sử dụng git rất nhiều. Đối với tôi git là rất thẳng về phía trước, nhưng tôi cá rằng tôi sẽ gãi đầu nếu tôi sử dụng darcs.
Sam

1
Nếu bạn đã thành thạo ui điên của git, darcs sẽ là một kẻ lang thang.
wlangstroth

1
Bạn có thể, xin vui lòng, giải thích tại sao darcs là tốt hơn cho các dự án nhỏ sau đó git?
shabunc

0

Nó có thể là một sự thay đổi mô hình tinh thần mạnh mẽ để hiểu rằng những gì chúng ta làm là thử nghiệm. Có một công cụ rẻ / dễ dàng để hỗ trợ điều này, tăng cường khả năng tiến về phía trước, một phần vì nó giúp tăng khả năng của bạn để thoát khỏi bất kỳ thử nghiệm nào khi nó không tốt.

Nhiều nhà phát triển nói, Tôi chỉ tạo các bản sao của mã của mình. Nhưng những bản sao này trở nên khó quản lý và cuối cùng là lộn xộn. Bạn có nhiều bản sao và không thể nhớ bản sao đó để làm gì, và sau đó cố gắng tìm ra khi nào an toàn để xóa chúng.

Tất cả điều này càng trở nên có giá trị hơn khi thử nghiệm đòi hỏi phải thay đổi phối hợp trên nhiều tệp. Và khi nó là một pfoject solo sử dụng Git thậm chí còn đơn giản hơn.

Thay vì tự hỏi liệu tôi có nên sử dụng nó trong một dự án solo hay không, bây giờ tôi nghĩ thật xấu hổ vì tôi đã không phát hiện ra điều này sớm hơn.


Để biết quan điểm của nhà thiết kế về điều này, hãy xem Linus trên Git trên YouTube (~ 70 phút)
WarrenT
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.