Cách sử dụng kiểm soát phiên bản


19

Tôi đang phát triển một trang web bằng php trong localhost và khi các mô-đun của nó được hoàn thành, tôi tải nó lên đám mây để bạn bè của tôi có thể kiểm tra alpha.

Khi tôi tiếp tục phát triển, tôi đã có rất nhiều tệp và tôi không biết tệp nào tôi đã chỉnh sửa hoặc thay đổi, v.v. Tôi đã nghe nói về cái gì đó là 'kiểm soát phiên bản' để quản lý tất cả những tệp đó nhưng không chắc nó hoạt động như thế nào.

Vì vậy, câu hỏi của tôi là: Có cách nào dễ dàng / dịch vụ / ứng dụng có sẵn để tôi theo dõi tất cả các chỉnh sửa / thay đổi / tệp mới và quản lý các tệp khi tôi phát triển trang web. Ngay sau khi tôi hoàn thành một mô-đun, tôi muốn tải nó lên đám mây (Tôi đang sử dụng Dịch vụ đám mây của Amazon). Nếu có điều gì đó xảy ra với các tệp mới, tôi có thể muốn quay lại tệp cũ. Và có thể, trong một hoặc hai lần nhấp, tôi có thể xem các tệp mà tôi đã chỉnh sửa hoặc thay đổi kể từ lần cuối tôi tải lên?


5
Có rất nhiều gợi ý về việc sử dụng hệ thống kiểm soát phiên bản nào, và thành thật mà nói, tất cả chúng đều tốt hơn so với cách "thủ công" hiện tại của bạn.
Johan

Câu trả lời:


28

Quản lý cấu hình phần mềm , trong đó Phiên bản kiểm soát là một phần, phức tạp hơn một chút so với việc theo dõi các thay đổi đối với các tệp, mặc dù bạn chắc chắn có thể bắt đầu với điều đó. Nhưng hãy đọc các bài viết Wikipedia được liên kết ở trên cùng với hướng dẫn của Joel Spolky về Mercurial .

Để bắt đầu, hãy chọn một trong Mercurial, GIT hoặc Bazaar theo thứ tự đó và cài đặt nó cùng với các công cụ cho IDE và hệ điều hành của bạn (tôi thích Mercurial với HGE cho Eclipse).

  1. Khởi tạo một kho lưu trữ từ thư mục làm việc của bạn ( hg init với Mercurial) ..
  2. Quyết định tập tin và thư mục nào bạn muốn theo dõi và tập tin nào không. Nguyên tắc chung là không theo dõi các tệp được tạo bởi trình biên dịch và các công cụ khác.
  3. Sử dụng lệnh để thêm các tệp và thư mục vào kho lưu trữ ( hg add for Mercurial).
  4. Giới thiệu với công cụ về các mẫu cho các tệp bạn không muốn theo dõi (chỉnh sửa .hgignore cho Mercurial).
  5. Thực hiện cam kết theo dõi các phiên bản gốc ( hg ci ).
  6. Thực hiện một cam kết sau mỗi cột mốc hợp lý, ngay cả khi đó là một cột nhỏ.
  7. Thêm tệp mới khi bạn tạo chúng.
  8. Lặp lại hai lần cuối.
  9. Sao lưu thư mục làm việc của bạn và kho lưu trữ thường xuyên như hợp lý.

Với các tệp của bạn trong kho lưu trữ, bạn có thể biết sự khác biệt giữa hai phiên bản của bất kỳ tệp hoặc thư mục hoặc dự án hoàn chỉnh ( hg diff ), xem lịch sử thay đổi ( hg hist ) và cuộn lại các thay đổi ( hg up -r ).

Bạn nên gắn thẻ (thẻ hg ) kho lưu trữ trước khi xuất bản mã của mình để có cách dễ dàng quay lại chính xác những gì bạn đã xuất bản để sửa đổi hoặc so sánh.

Nếu bạn muốn thử nghiệm với một dòng phát triển khác, hãy thực hiện nó trong một nhánh đơn giản bằng cách nhân bản kho lưu trữ chính ( hg clone ) và không đẩy lùi cho đến khi thử nghiệm được kết luận. Nó dễ dàng như có một thư mục làm việc khác cho thí nghiệm.

Nếu thử nghiệm dành cho phiên bản mới, được nâng cấp thì hãy sao chép và sau đó là nhánh ( nhánh hg ) để bạn có thể giữ tất cả các bản sao của kho lưu trữ mà không cần một thử nghiệm nào can thiệp vào thử nghiệm khác.

Linus Torvalds (người liên quan đến hàng chục ngàn tệp và hàng triệu dòng mã trong các dự án của mình) đã nói chuyện với Google về lý do tại sao công cụ này không thể là CVS, SVN hoặc bất kỳ trong số nhiều tệp miễn phí và thương mại xung quanh ; nó rất đáng xem


1
Tôi thích Mercurial là tốt. Tôi thích sự hỗ trợ trong Netbeans vì trong khi bạn viết mã, nó hiển thị cho bạn mọi dòng đã thay đổi kể từ lần cam kết cuối cùng của bạn. Nó cũng mã màu các tệp mới / thay đổi / không thay đổi trong cây sản phẩm. Nghe có vẻ hữu ích cho OP : I lose track of which file I've edited or changed. HGE cũng có thể làm điều này, tôi đã không sử dụng nó.
JD Isaacks

1
+1 để mô tả quy trình cũng như một phần của cách sử dụng các công cụ để thực hiện.
Donal Fellows

Là một câu hỏi phụ, liệu .xcodeprojtệp Xcode sử dụng cho các dự án iOS có được coi là thứ gì đó để Mercurial bỏ qua hay không, hay điều quan trọng là giữ cho tệp được đồng bộ hóa?
Kevin Yap

1
@Kevin Tôi không biết về Xcode, nhưng các IDE và công cụ mới nhất có các tệp cấu hình riêng biệt cho toàn bộ nội dung dự án (phiên bản ngôn ngữ và thư viện, quy tắc định dạng mã, phụ thuộc, v.v.) và tùy chọn người dùng (thư mục nơi tôi đặt công cụ, bảng điều khiển bố cục, giao diện, cỡ chữ, chữ ký cá nhân). Cái trước có thể được bao gồm trong kho nếu nhóm đồng ý. Không nên bao gồm cái sau, bởi vì một bản cập nhật từ kho lưu trữ sẽ ghi đè lên sở thích của bạn với người khác, và điều đó nhanh chóng gây khó chịu và phản tác dụng.
Apalala

1
@ John: NetBeans thực hiện điều đó cho mọi VCS mà nó hỗ trợ. Tại thời điểm này, nó chỉ là một tính năng cơ bản của IDE.
Mike Baranczak

13

Tôi rất muốn giới thiệu Git. Tìm hiểu về nó tại đây: https://lab.github.com/

Nếu bạn không thích Git, có các giải pháp kiểm soát phiên bản khác. Bạn có thể kiểm tra SVN.


1
Là người dùng hàng ngày của Git, tôi muốn thêm rằng việc lấy các lệnh thiết yếu cực kỳ dễ dàng và trực quan. Và sự hỗ trợ cho nó rất tuyệt vời vì vậy bạn sẽ không bị mất khi bạn tìm kiếm sự giúp đỡ. Tôi đã sử dụng SVN nhưng nó không dễ dàng với tôi nhưng nó có thể ổn với nhiều người dùng.
Muhammad Usman

1
+1 Cũng xem xét: mọi người chọn chuyển từ svn (một VCS) sang git (một DVCS - d = phân phối) nhưng không chuyển từ GIT sang SVN (thông qua lựa chọn).
Michael Durrant

7

Có phải chỉ bạn không?, Sử dụng DVCS

Nghe có vẻ phản trực giác, Hệ thống kiểm soát phiên bản phân tán (mercurial, git, bazaar) tốt hơn để bắt đầu với một hệ thống tập trung (svn, cvs). Tại sao?, Bạn cài đặt nó trên máy của mình và chạy kho lưu trữ cục bộ, và đó là nó. Trên một hệ thống tập trung như svn, bạn cần thiết lập máy khách và máy chủ ... và sau đó, bạn cần kết nối với máy chủ để lưu trữ các thay đổi của mình.

Với DVCS, bạn, kho lưu trữ cục bộ và nếu bạn muốn, bạn có thể sử dụng một dịch vụ như bitbucket.org hoặc github.com.

IMHO, mercurial là một DVCS thân thiện hơn và có khả năng tương đương để bắt đầu.

Có những người khác?, Sử dụng một DVCS!

rất nhiều lợi thế khi sử dụng DVCS để làm việc với nhóm, điều quan trọng nhất trái ngược với hệ thống tập trung là không có chủng tộc cam kết và điều này là do về mặt kỹ thuật, mỗi kho lưu trữ của mỗi cá nhân là một nhánh và khi bạn chia sẻ những thay đổi mà các nhánh được hợp nhất cho bạn và bạn thậm chí không nhận thấy, có nghĩa là thay vì có một lịch sử phiên bản như thế này, nơi bạn có người thực hiện công việc của họ trên một đường thẳng:

nhập mô tả hình ảnh ở đây

Bạn cuối cùng có một cái gì đó như thế này, nơi mọi người chỉ cam kết ad hoc:

nhập mô tả hình ảnh ở đây

Mỗi người chỉ lo lắng về công việc của mình trong khi tạo phiên bản (nghĩa là không chạy đua để cam kết) và không lo lắng về kết nối với máy chủ chỉ để cam kết.

Chúc may mắn


1
+1 ví dụ rất hay! Bạn nên chỉnh sửa để nhấn mạnh nỗi đau vắng mặt trong các cây hợp nhất phức tạp với các công cụ hiện đại.
Apalala

5

Nói ngắn gọn, có nhiều lựa chọn thay thế, trong đó Subversion (SVN) và Git có vẻ phổ biến nhất (do đó dễ tìm giải pháp nhất trên web).

Cả hai đều khác nhau. SVN đơn giản hơn, nhưng Git không yêu cầu bạn phải có máy chủ để bắt đầu - bạn có thể kiểm soát phiên bản cục bộ.

Giả sử bạn có Linux và muốn bắt đầu sử dụng Git:

  1. Cài đặt Git
  2. Chuyển đến thư mục và thực thi lệnh 'git init'
  3. Tìm hiểu cách thêm tệp, xem lại thay đổi, cam kết chúng ...
  4. ... và để thực hiện các công cụ nâng cao hơn (xem lại nhật ký, hoàn nguyên các thay đổi, bỏ qua các tệp, tạo các nhánh, hợp nhất chúng, tạo và sử dụng từ xa, sử dụng các mô hình con, sử dụng hỗ trợ SVN, v.v.).

Hy vọng điều này sẽ giúp bạn bắt đầu.


1
SVN không yêu cầu máy chủ, nhưng nó yêu cầu kho lưu trữ phải ở trong một thư mục khác với thư mục đang hoạt động. SVN và CVS thường không được ủng hộ trong các công cụ ưu tiên như GIT và Mercurial, không yêu cầu kết nối mạng cho công việc hàng ngày và không yêu cầu kho lưu trữ trung tâm để phát triển phần mềm hợp tác và phân tán.
Apalala

Bạn có nghĩ rằng điều này thực sự giống hệt với việc tạo máy chủ kho lưu trữ SVN trên localhost không? Những gì bạn cần là định cấu hình kho lưu trữ trung tâm và duy trì nó và khi bạn di chuyển các tệp của mình, bạn chắc chắn rằng kho SVN vẫn có thể truy cập được (thậm chí không nghĩ đến việc sao chép toàn bộ kho lưu trữ trung tâm mỗi khi bạn di chuyển tệp sang máy khác). Ngoài ra tôi không nghĩ Subversion bị phản đối (mặc dù tôi không nói về CVS) - nó chỉ tập trung và trong một số trường hợp, nó sẽ là một ý tưởng tốt hơn để thực thi tập trung hóa.
Tadeck

Apalala, một số câu hỏi: làm thế nào Mercurial xử lý thông tin mà người dùng tác giả thay đổi cụ thể? Trong Git, bạn có thể thay đổi nó và cam kết thay đổi như một người khác, do đó tạo ra một số mớ hỗn độn (có một số tính năng để phân biệt commiter với người gửi, nhưng nó không đủ rõ ràng). Mercurial đã giải quyết vấn đề liên quan đến kiểm soát phiên bản phân tán này chưa?
Tadeck

2
@Tadeck Đó không phải là cách mà Mercurial và GIT hoạt động theo cách hiểu của tôi. Trong đó, một người chịu trách nhiệm về những gì đi vào kho lưu trữ, bằng cách cam kết, kéo hoặc vá. Trong kho lưu trữ phân tán, nếu ai đó có đặc quyền đẩy, thì bạn đã tin tưởng họ bằng cả trái tim. Linus Torvalds giải thích điều đó rất tốt trong buổi nói chuyện này: youtube.com/watch?v=4XpnKHJAok8
Apalala

@Tadeck Về SVN, tôi đã sử dụng nó rất nhiều và cuối cùng tôi đã nghĩ rằng nó không cải thiện so với CVS (ít nhất là có kho lưu trữ ASCII đơn giản và đủ trưởng thành để không bao giờ làm hỏng chúng). Một lần nữa, Torvalds giải thích điều đó rất tốt trong video tôi liên kết trước đó. Không có khả năng thực hiện công việc ngoại tuyến và không thể hợp nhất làm cho các công cụ SCM cũ bị phản đối.
Apalala

2

Như Apalala đề xuất, tôi khuyên bạn nên kiểm tra hginit . Vì bạn chưa quen với kiểm soát phiên bản, bạn có thể bỏ qua trang đầu tiên. Điều đó sẽ cung cấp cho bạn một phần giới thiệu tốt, sau đó bạn có thể đăng lên SO nếu bạn có câu hỏi cụ thể.


0

Tôi sẽ đi ngược lại với ý kiến ​​của đa số, và đề nghị Subversion. Subversion rất dễ sử dụng, và nó thực hiện tất cả những thứ mà các cá nhân và nhóm nhỏ cần. Đây là một sản phẩm trưởng thành, vì vậy mọi IDE ngoài kia đều hỗ trợ tốt cho nó. Vâng, nó không có tất cả các tính năng của Git. (Tôi chưa bao giờ sử dụng Mercurial, vì vậy tôi sẽ không nói về nó.) Nhưng hầu hết các nhà phát triển không thực sự cần những tính năng được thêm vào đó.

Nhiều kho lưu trữ? Tôi chắc chắn có một số cách sử dụng hợp pháp cho những thứ đó, nhưng tôi chưa bao giờ gặp phải chúng.

Có thể thực hiện các cam kết địa phương, mà không cần truy cập mạng? Thật tuyệt khi có, nếu bạn tình cờ thực hiện một số thay đổi riêng biệt và bạn không thể truy cập vào máy chủ kho lưu trữ - nhưng thành thật mà nói, điều đó có thường xuyên xảy ra không?

Git làm cho nó dễ dàng hơn để đối phó với sự phân nhánh và sáp nhập. Nhưng đối với đội một người, đó không phải là vấn đề lớn.

Đối với một cái gì đó trên quy mô của nhân Linux - yeah, hãy sử dụng Git. Đối với phần còn lại của chúng tôi, Subversion là đủ tốt.


Hạ cấp. Các tính năng của Git không có trong SVN (chẳng hạn như phân nhánh nhẹ và dễ dàng hợp nhất) rất hữu ích, thậm chí có thể cần thiết, cho các dự án nhỏ nhiều như trên các dự án lớn.
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser Vâng, đó là ý kiến ​​của tôi lúc đó, nhưng sau khi sử dụng Git một cách chuyên nghiệp trong vài năm, tôi phải đồng ý với bạn.
Mike Baranczak

Xuất sắc! Bạn sẽ bị đồng hóa. : D
Marnen Laibow-Koser

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.