Thói quen kiểm soát phiên bản tốt nhất cho nhà phát triển solo?


36

Tôi là nhà phát triển duy nhất trong công việc của mình và trong khi tôi hiểu lợi ích của VCS; Tôi thấy khó để gắn bó với các thực hành tốt. Hiện tại tôi đang sử dụng git để phát triển hầu hết các ứng dụng web (sẽ không bao giờ được mở nguồn do công việc của tôi).

Quy trình công việc hiện tại của tôi là thực hiện nhiều thay đổi cho trang web phát triển, kiểm tra, sửa đổi, kiểm tra, hài lòng và cam kết thay đổi, sau đó đẩy cam kết lên trang web trực tiếp (vì vậy nếu tôi đang làm việc với một thay đổi lớn mới; tôi chỉ có thể cam kết mỗi tuần một lần, nhưng IDE của tôi có một lịch sử hoàn tác tốt cho những thứ không được cam kết).

Về cơ bản, tôi chỉ sử dụng git khi chuyển đổi giữa các máy (ví dụ: máy tính dev hoạt động sang máy tính dev tại nhà hoặc máy sống), nhưng vào ban ngày tôi không thực sự thấy được lợi ích. Điều này dẫn đến việc tôi có danh sách các thay đổi dài (và tôi gặp khó khăn khi tìm thông điệp tốt cho từng cam kết; và bất cứ khi nào tôi vội vàng - tôi có xu hướng để lại các tin nhắn nhảm nhí như 'thay đổi cho quản trị viên và mẫu').

Bao lâu tôi nên cam kết? Mỗi thay đổi một dòng có được một cam kết không? Tôi có nên cam kết trước bất kỳ thử nghiệm nào không (ví dụ: ít nhất là đối với lỗi cú pháp / biên dịch và sau đó phải hoàn toàn hoàn thành nó, vì ý tưởng không hoạt động hoặc thông báo là dối trá)?

Tôi có nên đảm bảo rằng tôi cam kết mỗi sáng / chiều trước khi tôi ngừng làm việc cho bữa tối trong khi nó vẫn còn tươi? Những gì tôi đang bỏ lỡ khi có thói quen VCS xấu?


2
Có thể một trong những câu hỏi của bạn về lý do tại sao bạn cảm thấy như VCS không hoạt động với bạn là vì bạn đang sử dụng Git làm nhà phát triển solo? Git có vẻ như quá mức đối với tôi đối với một nhà phát triển, có lẽ một cái gì đó đơn giản hơn với ít tính năng như SVN sẽ dễ sử dụng hơn?
maple_shaft

6
@maple_shaft: Tôi chưa sử dụng Git, nhưng Mercurial đơn giản như Subversion cho các tác vụ phát triển solo cơ bản. (Đơn giản hơn, thực tế, vì việc tạo kho lưu trữ tương đương dễ dàng hơn.)
David Thornley

15
Tại sao git sẽ quá mức cần thiết?
Tamás Szelei

1
@maple_shaft lợi ích thực sự đến sau. Không cần phải giải quyết cho ít.

3
Điều đáng nói là đối với DVCS như git và đồng bóng, để gặt hái những lợi ích của bản sao lưu ngoại vi của kiểm soát nguồn của bạn (như đã đề cập trong một số câu trả lời) bạn cần phải thúc đẩy thường xuyên, không chỉ cam kết.
kéo

Câu trả lời:


24

Bạn đang thiếu rất nhiều.

Theo một cách nào đó, tôi cũng đang solo. Tôi cam kết mỗi khi có một thay đổi đáng kể hoặc trước khi tôi bắt đầu một thay đổi quan trọng để tôi có thể quay lại nếu tôi làm hỏng mọi thứ, và mọi lúc mọi nơi ngay cả khi tôi không làm gì lớn. Không thực sự hàng ngày, nhưng gần gũi. Đôi khi một vài lần một ngày.

Những gì tôi nhận được là tôi có thể quay lại bất cứ lúc nào tôi muốn. Đó là rất nhiều. Ngoài ra, có các chi nhánh đặt hàng giúp.

Tôi đoán nó mang lại cho tôi rất nhiều thứ tự.

Tôi đang sử dụng svn và tôi phát ốm vì nó. Nhưng không thể dành nhiều thời gian hơn để học bất cứ điều gì khác.

Chúc may mắn.


+1 Gần đây tôi đã bắt đầu sử dụng VCS và GIT là thứ dành cho tôi :)
yati sagade

1
Tôi đã tránh kiểm soát phiên bản trong một thời gian dài vì tôi có ấn tượng rằng nó quá cồng kềnh / xấu xí / gây phiền nhiễu. Vài tháng trước tôi đã quyết định làm quen với Subversion và bây giờ tôi đã thề với nó.
Dalin Seivewright

1
Tôi có một vài dự án solo: một số trên Github, một số thì không. Tôi luôn sử dụng git ngay cả khi tôi chỉ xây dựng một cái gì đó cho mục đích rõ ràng là học một API / công cụ cụ thể. Nó thực thi các thói quen tốt cho các dự án thực tế, nơi nó hữu ích hơn, như @jbcolmenares mô tả.
sarumont

2
Tôi sẽ phản bác lại "không thể dành nhiều thời gian hơn để học bất cứ điều gì khác" với hginit.com . Đếm thời gian bạn tức giận tại svn trong một tuần, sau đó dành thời gian đó để đọc hginit vào tuần tiếp theo.
tdammers

@tdammers sẽ xem xét
cauch

18

Bạn nên cam kết thường xuyên. Bạn chắc chắn nên cam kết sau khi đạt được một số mốc hợp lý. Nếu việc đó mất nhiều thời gian hơn một ngày, ít nhất bạn nên cam kết vào cuối ngày làm việc, hoặc tốt hơn nữa, chia công việc của bạn thành những phần nhỏ hơn.

Có nhiều lý do để làm điều đó. Ví dụ, nếu máy tính của bạn gặp sự cố thì sao? Sẽ tốt hơn nhiều nếu chỉ mất một ngày làm việc so với một tuần hoặc một tháng. Một lý do khác là các cam kết thường xuyên giúp việc cách ly một lỗi dễ dàng hơn. Bạn có thể thực hiện tìm kiếm nhị phân và tìm ra thay đổi nhỏ nào gây ra lỗi.

Một điều nữa: trước khi bạn cam kết, bạn nên thực hiện một khác biệt và xem xét tất cả những thay đổi bạn đã thực hiện. Điều này cho phép bạn kiểm tra xem tất cả các thay đổi có ý nghĩa hay không và bạn không quên bất cứ điều gì. Điều này cũng giúp bạn đưa ra một thông điệp cam kết tốt hơn. Và, tất nhiên, đây là một lý do khác để cam kết thường xuyên: việc trải qua những thay đổi trong một ngày dễ dàng hơn nhiều so với giá trị của một tháng.


"Điều gì sẽ xảy ra nếu máy tính của bạn gặp sự cố" - các tệp được lưu vào đĩa khá thường xuyên và sao lưu được thực hiện hàng đêm (nếu bạn có nghĩa là nếu đĩa cứng bị hỏng). Tuy nhiên +1 cho tìm kiếm nhị phân cho các lỗi có thể có ích. Tôi khá giỏi trong việc nhanh chóng tìm ra 95% lỗi của mình; nhưng thỉnh thoảng có một lỗi thực sự kỳ lạ phát sinh từ một sự thay đổi dường như không quan trọng trong một phần khác của chương trình.
dr jimbob

Có, tôi có nghĩa là "nếu đĩa bị vỡ" hoặc "nếu trần nhà hang động" hoặc "nếu thiết bị EMP tắt gần đó". :) Bất cứ điều gì có thể gây mất dữ liệu. Cam kết thường xuyên là cách dễ nhất để sao lưu công việc của bạn và nó cho phép bạn dễ dàng sao lưu trang web, bằng cách sử dụng máy chủ kiểm soát phiên bản từ xa.
Dima

1
@Dima: bạn sẽ cần phải thúc đẩy và không chỉ cam kết có bản sao lưu của mình
giải phóng

@liberforce Không phải tất cả các hệ thống kiểm soát phiên bản đều có hoạt động đẩy. Câu trả lời này là từ năm 2012. Tôi đã sử dụng lật đổ tại thời điểm đó, không được phân phối. Vì vậy, không đẩy.
Dima

2
@Dima: chắc chắn, nhưng OP đã sử dụng git, vì vậy các hướng dẫn có thể gây hiểu lầm vì bạn không nói rằng bạn đang nói về SVN.
lực lượng tự do

10

Để tận dụng tối đa CVS, bạn nên làm việc trên một tính năng / sửa lỗi tại một thời điểm và cam kết khi tính năng / sửa lỗi đó hoàn tất. Bằng cách này, bạn sẽ đạt được:

  • thông điệp cam kết sẽ dễ dàng hơn để tạo và sẽ có ý nghĩa hơn;
  • theo dõi dễ dàng hơn các lỗi trong tương lai trở lại các thay đổi đã giới thiệu chúng;
  • dễ dàng trở lại trạng thái trước đó (ngay cả khi điều đó có nghĩa là mất một tính năng không thành công nhưng vẫn giữ các sửa lỗi xảy ra sau đó).

Ngoài ra, vì bạn chuyển đổi giữa các PC, bạn nên có ít nhất hai chi nhánh:

  • một nhánh "Sẵn sàng hoạt động" luôn hoạt động (trừ các lỗi bạn đang làm việc trong nhánh phát triển, tất nhiên)
  • đôi khi một nhánh phát triển có thể ở trạng thái không thể vượt qua (như trong chuyến đi làm về nhà của bạn;).

1
+1 cho chi nhánh sẵn sàng để đi! Tôi không biết bao nhiêu lần tôi được yêu cầu hiển thị phần mềm khi sếp và khách hàng tiềm năng đi ngang qua. Thật tuyệt khi có một phiên bản thực sự hoạt động và không trong tình trạng thay đổi liên tục.
bluebill

Một phiên bản hoạt động và được kiểm tra thường được gắn thẻ. Đó là những gì bạn nên thể hiện, trừ khi ông chủ muốn xem những thay đổi mới nhất. Trong trường hợp đó, bạn chỉ git stashvà hiển thị những gì bạn có hoặc kiểm tra một cam kết cụ thể. Tất nhiên, nếu bạn có những thay đổi lớn đang tiến hành, thì những thay đổi đó phải ở trong một nhánh tiến hành công việc riêng biệt, vì vậy nhánh chính của bạn là một công việc ổn định trên thực tế.
lực lượng tự do

7

Mỗi thay đổi một dòng có được một cam kết không?

Nếu đó là những gì sửa một lỗi, chắc chắn.

Những gì tôi đang bỏ lỡ khi có thói quen VCS xấu?

Tôi đã làm việc với một anh chàng có "thói quen VCS xấu". Anh ấy thích tự mình làm việc và anh ấy phụ trách một dòng sản phẩm mang lại thứ gì đó như $ 1.000.000 / năm. Anh ta chỉ thực hiện cam kết khi ông chủ cằn nhằn anh ta. Rồi một ngày ổ cứng của anh bị hỏng. Sau khi nhận được một sự thay thế được thiết lập cho anh ta, chúng tôi đã phát hiện ra lần đăng ký cuối cùng của anh ta là 6 tháng trước. Vì VCS là Nguồn an toàn, bạn có thể đoán những gì khác đã xảy ra - lần xác nhận cuối cùng bị hỏng. Chúng tôi đã phải quay lại hơn một năm để có được một phiên bản không bị hỏng của dòng sản phẩm của anh ấy. Anh ta đã không bị sa thải, mặc dù anh ta nên có.

Một giai thoại khác liên quan đến bản thân tôi. Tôi đã từng lưu trữ mã cho các dự án sở thích và nghiên cứu trên các ổ cứng di động. Một ngày nọ, căn hộ của tôi bị đột nhập. Máy tính xách tay (đã bị hỏng) và tất cả các ổ cứng di động đã bị đánh cắp. Mọi DVD (ngoại trừ Red Dawn) đã bị đánh cắp. Không có máy tính để bàn nào bị đánh cắp. Nếu tôi có quyền kiểm soát nguồn ngoại vi, tôi sẽ không mất các dự án trị giá 15 năm, đặc biệt là vì một số dự án dựa trên học thuật - nhiều giáo sư rời khỏi học viện để chuyển sang ngành tư nhân để các dự án đó biến thành lỗ đen IP của công ty mất mã không thể phục hồi.

Bao lâu tôi nên cam kết?

Tôi chia nó thành một vài số liệu:

  • Bạn sẵn sàng mất bao nhiêu công việc nếu máy tính của bạn chết? hay bị đánh cắp?

  • Nếu điều này sửa Bug_1234, thì hãy kiểm tra mã với chú thích "sửa Bug_1234".

  • Nếu đây là phân phối / cột mốc hợp lý, thì hãy kiểm tra nó bằng một nhận xét như "Bug_1234, form_xyz" (hoặc Task_1234 nếu phù hợp).

  • Luôn luôn kiểm tra mã vào tối thứ Sáu trước khi bạn về nhà. Đồng thời thực hiện đăng ký (hoặc hoàn tác kiểm tra) tất cả mọi thứ trước khi đi nghỉ.

  • Bất cứ khi nào chính sách của công ty ra lệnh.


1
Tôi đồng ý anh chàng nên bị sa thải. Không cam kết, thậm chí ít nhất là cho các bản phát hành, là sự điên rồ. Làm thế nào bạn có thể tìm thấy các lỗi xuất hiện trong phiên bản 1.2 nếu bạn không biết mã nào trong 1.2? Có phải anh chàng chỉ đang thực hiện các bản sao của mã và nén trên ổ cứng của mình?
lực lượng tự do

5

Đừng nghĩ về số lượng thay đổi dòng. Hãy suy nghĩ trong khối chức năng. VCS cho phép bạn đặt tiêu đề ở vị trí trung tâm cho từng đoạn chức năng để bạn có thể dễ dàng xem "những gì đã xảy ra ở đây" với ví dụ như nhật ký git.

Ngoài ra, IDE giống như Eclipse cho phép bạn trỏ đến một dòng nhất định và đi đến cam kết đưa nó thành hình dạng mà bạn nhìn thấy. Nói cách khác, bạn có thể đi trực tiếp từ một dòng nguồn đến cam kết. Nếu cam kết nhỏ và có một thông điệp tốt, thì nó hữu ích hơn nhiều so với "hàng tấn lỗi cố định".


4

Tôi muốn nói rằng điều lớn nhất bạn đang bỏ lỡ bằng cách nhóm các thay đổi lại với nhau như thế là khả năng theo dõi thời điểm và nơi các lỗi được đưa ra.

Theo kinh nghiệm của tôi, đã có một vài lần một số lỗi được chú ý hai ba tuần sau khi nó được giới thiệu và phải sàng lọc các cam kết trị giá một tuần là rất khó sau khi thực tế. Trong những trường hợp này, thật hữu ích khi chỉ cần tìm kiếm nhị phân thông qua các cam kết để theo dõi xem thay đổi cá nhân nào gây ra sự cố. Các lỗi này chủ yếu là lỗi sử dụng bộ nhớ trên mã C ++, vì vậy nó có thể không xảy ra thường xuyên cho dự án của bạn.

Các lợi ích khác phát huy khi phát triển nhóm - nhận xét cam kết đơn giản, sáp nhập dễ dàng hơn, cam kết liên quan đến sửa lỗi, v.v.

Tôi đoán với quy trình làm việc của bạn rằng nếu bạn bắt đầu cam kết hàng ngày hoặc nửa ngày, bạn sẽ cần sử dụng thẻ hoặc dấu trang để theo dõi phiên bản mã nào được sử dụng trên trang web trực tiếp. Tôi muốn nói rằng đó là điều quan trọng nhất để theo dõi.


4

Tôi cũng là một nhà phát triển solo, tôi sử dụng SVN và tôi thích nó. Tôi thậm chí đã viết một công cụ để chuyển đổi cấu trúc cơ sở dữ liệu của mình và dữ liệu thử nghiệm trong đó thành xml để tôi có thể đưa nó vào kiểm soát nguồn.

Tôi thường cam kết bất cứ khi nào tôi đã hoàn thành một đơn vị công việc tự chủ. Đôi khi, nếu tôi thực hiện một loạt các sửa lỗi đơn dòng không liên quan và không liên quan ở đây và sau đó tôi cam kết tất cả chúng cùng nhau, nhưng nếu một sửa chữa một dòng xảy ra giữa hai đơn vị tự trị lớn không liên quan, thì nó sẽ tự xử lý cam kết, không có gì sai với điều đó.

Ngoài ra, tôi luôn cam kết mã biên dịch và hầu như luôn luôn mã cũng vượt qua tất cả các bài kiểm tra cơ bản. Nếu không, tôi đảm bảo bao gồm "KHÔNG LÀM VIỆC" trong thông điệp cam kết. Trường hợp duy nhất khi điều này xảy ra là khi tôi đã thực hiện những thay đổi quan trọng mà tôi không muốn mất mặc dù chúng chưa hoàn toàn hoạt động, và trên hết, tôi sắp tham gia vào một cuộc phiêu lưu tái cấu trúc tuyệt vời mà tôi không chắc liệu nó sẽ thành công Vì vậy, sau đó, tôi sử dụng kho lưu trữ như một bản sao lưu của công việc tôi đã làm cho đến nay trước khi mạo hiểm để làm hỏng nó và phải vứt nó đi.

Điều này có nghĩa là tôi luôn cam kết khi mã nguồn của tôi cần phải được cam kết; nó hoàn toàn không có ý nghĩa để có quy tắc cam kết buổi sáng hoặc buổi tối cam kết. Đó là trạng thái mà mã nằm trong đó ra lệnh cho dù đó là thời gian để cam kết hay không.

Các thông điệp mà bạn đặt trong kho lưu trữ không quan trọng lắm. Nếu bạn hoàn toàn không thể đưa ra một cái gì đó có ý nghĩa, thì vẫn tốt hơn là cam kết với một tin nhắn trống hơn là không cam kết gì cả khi bạn nên.

Nếu bạn không thể nghĩ ra một thông điệp cam kết tốt bởi vì mọi thứ bạn phát ra nghe có vẻ ngu ngốc, hãy nhớ rằng điều này là ổn; các thông điệp cam kết được dự kiến ​​sẽ nêu rõ ràng, vì vậy chúng chắc chắn sẽ gây ra sự ngu ngốc cho bạn khi bạn viết chúng. Nhưng hãy tin tôi, nếu bạn cần kiểm tra các bản sửa đổi cũ một tháng sau, bạn sẽ biết ơn ngay cả những tin nhắn ngu ngốc không có tin nhắn.


1

Cam kết mỗi khi bạn thực hiện thay đổi "hợp lý". Ví dụ: nếu bạn đang triển khai một tính năng mới, bạn đang thực hiện từng bước một. Mỗi bước thường phụ thuộc vào nhau. Vì vậy, bạn chỉ có thể cam kết các bước đó một cách riêng biệt và giải thích trong thông báo cam kết tại sao mỗi bước được yêu cầu.

Thông điệp cam kết thực sự quan trọng. Bạn phải tránh nói những gì bạn đang làm, nói tại sao bạn làm điều đó. Mã đã ghi lại các thay đổi, nhưng trong 6 tháng, bạn sẽ rất vui khi biết lý do tại sao bạn thực hiện chúng.

Điều này cũng hữu ích nếu tình cờ ai đó nhảy vào và bạn không còn cô đơn nữa. Ngay cả đối với bạn, lịch sử sạch sẽ giúp sử dụng dễ dàng hơngit blame để biết khi nào và tại sao dòng đó có lỗi đã được thay đổi.

Thực hiện các cam kết nhỏ thay vì bóng lớn thay đổi cũng cho phép bạn kiểm tra trạng thái trung gian. Bạn có thể bỏ qua các thay đổi nếu bạn phải phát hành một cái gì đó khẩn cấp. Nếu bạn giới thiệu một lỗi trong khi nó hoạt động trước đó, bạn có thể bỏ qua và kiểm tra xem đó có phải là những thay đổi không được cam kết giới thiệu lỗi đó hay không, nếu đó là trong một cam kết cũ hơn.

Bạn cũng có thể giải phóng sức mạnh của git bissectđiều đó sẽ cho bạn biết cam kết rằng lỗi khó chịu này. Nếu cam kết dài 2.000 dòng, nó vẫn giúp nhưng không nhiều ...

Một điều nữa là đó là bước đầu tiên để tích hợp liên tục (CI) và sau đó là triển khai liên tục (CD). CI và các bài kiểm tra của bạn có thể được kích hoạt trên một cam kết mới, do đó cho bạn biết mỗi lần bạn đẩy các thay đổi của mình nếu chúng phá vỡ thứ gì đó hay không. Bằng cách này, bạn có thể biết liệu có an toàn để triển khai hay không và được thông báo về điều đó tại thời điểm sự cố được đưa ra và không chỉ trước khi bạn phát hành khi bạn đang vội.

Về những câu hỏi khác của bạn:

  • không cam kết những thứ mà bạn thậm chí không biên dịch, trừ khi bạn sẵn sàng viết lại lịch sử của mình cho điều đó (sử dụng git rebase --interactive).
  • thay đổi một dòng xứng đáng được cam kết nếu nó có mục đích riêng (sửa lỗi hoặc không liên quan đến các thay đổi hiện không được cam kết của bạn). Sử dụng git add --patchđể giai đoạn những.
  • không cần ép buộc bản thân phải cam kết trước bữa tối, trừ khi bạn có những thứ quan trọng bạn không thể để mất. Trong trường hợp đó, bạn có thể muốn cam kết trong một chi nhánh riêng mà công việc của bạn đang tiến hành.
  • cam kết và đẩy đến một kho lưu trữ từ xa là một bản sao lưu. Nếu bạn cam kết và chỉ đẩy một lần một tuần, trong trường hợp xấu nhất bạn có thể mất một tuần làm việc.

0

Bao lâu tôi nên cam kết?

Là một nhà phát triển solo, tôi thường cam kết bất cứ khi nào tôi cảm thấy mình đã tạo ra một sự thay đổi đáng kể, sau khi thử nghiệm cơ bản và khi tôi rời khỏi một dự án vào cuối đêm.

Mỗi thay đổi một dòng có được một cam kết không?

Không, trừ khi thay đổi một dòng sẽ thay đổi đáng kể một tính năng hoặc lỗi.

Tôi có nên cam kết trước bất kỳ thử nghiệm nào không (ví dụ: ít nhất là đối với lỗi cú pháp / biên dịch và sau đó phải hoàn toàn hoàn thành nó, vì ý tưởng không hoạt động hoặc thông báo là dối trá)?

Chắc là không. Ít nhất là đối với tôi, tôi thực hiện hầu hết các thử nghiệm và mã hóa trên 'bản sao làm việc' và cam kết sau khi tôi hài lòng với những thay đổi của mình. Trong nhiều IDE, nó sẽ cho tôi thấy những gì đã thay đổi trước khi tôi thực sự thực hiện cam kết và cho tôi cơ hội đính kèm ghi chú vào cam kết

Tôi có nên đảm bảo rằng tôi cam kết mỗi sáng / chiều trước khi tôi ngừng làm việc cho bữa tối trong khi nó vẫn còn tươi? Những gì tôi đang bỏ lỡ khi có thói quen VCS xấu?

Tôi không quen thuộc lắm với VCS hoặc những thói quen xấu mà nó gây ra. Tôi nghĩ rằng tôi chủ yếu đã chia sẻ ý kiến ​​của tôi về điều này để trả lời cho câu hỏi đầu tiên.

Để trả lời cho câu hỏi chung được đăng, bạn dường như chủ yếu sử dụng các cam kết như các nhánh được đề cập trong một bài trả lời khác. Tôi không chắc bạn đang sử dụng IDE nào có lịch sử hoàn tác tốt, v.v., nhưng tôi chưa tìm thấy IDE nào mà tôi cảm thấy tốt hơn khi khởi động lại IDE và di chuyển giữa các máy.


I am not very familiar with VCS or what bad habits it causes.Chúc bạn may mắn!
yannis

1
Tôi không chắc chắn làm thế nào tôi đọc nó không chính xác nhiều lần, nhưng tôi vẫn đọc nó là "VSS" như trong nguồn Visual an toàn. Tôi khá quen thuộc với một số hệ thống kiểm soát phiên bản khác nhau bao gồm SVN và GIT và thường xuyên sử dụng chúng như một nhà phát triển solo, nhưng có lẽ tôi có một vài thói quen xấu khi xem xét rằng tôi thực sự đã sử dụng chúng trong bối cảnh của một kịch bản đa nhà phát triển lớn .
dbuell

Chà, như tôi đã chiến đấu với SourceSafe trong hơn 3 năm, nhận xét của tôi vẫn đứng vững: Chúc bạn may mắn! Để cho bạn một ví dụ, VSS6 có thể xử lý các kho lưu trữ khoảng 200mb - 300mb, sau đó nếu bạn may mắn, một vài tệp sẽ bị hỏng ngẫu nhiên. Tất nhiên, nơi có nhiều bản sửa lỗi và cách giải quyết, và VSS không bao giờ được MS dự định là một vcs toàn diện, nhưng hãy xem xét bản thân bạn may mắn bạn không bao giờ phải đối phó với nó ...
yannis

0

Tôi là một người thường xuyên đi lại và tôi thấy nó phù hợp với tôi, nhưng phải thừa nhận rằng các thông điệp cam kết của tôi hầu như luôn luôn như thế,

Age:  9 mins [*] Working on implementing and testing PaintSystem.
Age: 17 mins [*] Working on implementing and testing PaintSystem.
Age: 37 mins [*] Working on implementing and testing PaintSystem.
Age: 52 mins [*] Working on implementing and testing PaintSystem.

Vì vậy, tôi không thể nói chính xác rằng việc thực hiện các cam kết thường xuyên và theo thói quen như vậy đối với chi nhánh của tôi (đồng bóng) đã khuyến khích chính xác các nhật ký cam kết chi tiết nhất. Đôi khi, tôi thậm chí sẽ thực hiện mã nửa chừng nếu vợ tôi yêu cầu tôi ra ngoài ăn tối vào thời điểm đó tôi sẽ nhanh chóng sao chép và sử dụng tin nhắn cam kết "Làm việc trên [...]" trước đó.

Các mẫu nhật ký cam kết của tôi thường như, "Working on [...] Working on [...] Working [...] Completed [...] Started working on [...] Working on [...] Completed [...] Started working on [...]"

Mặc dù mặt trái, nó đã cứu mông tôi. Đôi khi, tôi gặp phải trường hợp khó khăn mà tôi không lường trước và kiểm tra lại, tại thời điểm đó, các cam kết thường xuyên giúp tôi tìm ra chính xác nơi tôi đã giới thiệu lỗi.

Vì vậy, tôi không biết về những thói quen tốt nhất và tôi chắc chắn không phải là người biết lắng nghe những thói quen ghi nhật ký cam kết lý tưởng, nhưng tôi chắc chắn có thể nói rằng việc cam kết thường xuyên hơn chắc chắn có thể giúp ích khi bạn cần thực hiện hồi quy.

Mỗi thay đổi một dòng có được một cam kết không?

Tôi đã cam kết thay đổi một dòng trước đây nhưng thường là những thay đổi khó khăn và có lẽ tôi đã thiếu thời gian. Cam kết của tôi không phải lúc nào cũng giống với các đơn vị hoàn thành và hoàn thành công việc hoặc thay đổi. Như đã nói, đôi khi chúng chỉ là kết quả của việc vợ tôi yêu cầu tôi ra ngoài ăn tối một cách bất ngờ.

TBH rất nhiều cam kết của tôi theo "Working on [...]"mô hình nhật ký đó không mô hình hóa các đơn vị thay đổi mạch lạc (tại sao tôi thường không thể đưa ra một thông điệp tốt hơn "Working on [...]") mà chỉ là kết quả của việc tôi hít thở, như tự pha một tách cà phê. Các "Completed [...]"thông điệp cho biết kết thúc của đơn vị công việc, và ở đó tôi thường viết một tin nhắn nhiều chi tiết hơn cùng với người đầu tiên "Started working on [...]"thông điệp loại khi tôi chỉ bắt đầu làm việc trên một cái gì đó. Nếu bạn trung bình cam kết cứ sau 15 phút một lần, thì những tin nhắn "Làm việc trên [...]" sẽ giống như những người ở giữa cho những gì ai đó có thể cam kết trong một cam kết cồng kềnh với một thông điệp chi tiết hơn.

Tôi có nên cam kết trước bất kỳ thử nghiệm nào không (ví dụ: ít nhất là đối với lỗi cú pháp / biên dịch và sau đó phải hoàn toàn hoàn thành nó, vì ý tưởng không hoạt động hoặc thông báo là dối trá)?

Tôi chỉ tiếp tục và cam kết trước khi chạy thử nghiệm đôi khi (một lần nữa nếu tôi có một sự kiện bất ngờ). Ngoài ra, mặc dù tôi là một mình, tôi vẫn đẩy tới một máy chủ (chỉ một máy chủ đang chạy ở đây trên mạng LAN) có CI. Điều đó có vẻ như quá mức cần thiết nhưng dunno, tôi đã quá quen với việc dựa vào đó tại nơi làm việc trước đây của tôi. Thêm vào đó, tôi không muốn bị làm phiền khi phải chạy tất cả các bài kiểm tra đơn vị và tích hợp của mình mỗi lần. Tôi thích có tất cả gắn liền với chỉ đẩy. Nếu một bài kiểm tra thất bại, nó đủ dễ để làm việc theo hướng tiến lên trong đó tôi thực hiện hồi quy, sửa lỗi trong vòng quay mới nhất và tiếp tục. Điều đó nói rằng, tôi ít nhất xây dựng mã chống lại một bản dựng gỡ lỗi trước khi tôi cam kết.

Tôi có nên đảm bảo rằng tôi cam kết mỗi sáng / chiều trước khi tôi ngừng làm việc cho bữa tối trong khi nó vẫn còn tươi?

Tôi muốn cam kết trước khi ra ngoài và nghỉ ngơi giữa lập trình. Tôi đã không thực sự suy nghĩ nhiều về lý do chính xác cho đến khi tôi gặp phải câu hỏi này. Tôi cho rằng điều đó là để ngăn bản thân tôi chọn nơi tôi rời đi mà không có nhật ký cam kết ở nơi tôi rời đi mà tôi có thể khác biệt. Hmm, tôi cần phải quay lại với bạn về điều đó vì có thể không cần thiết về mặt lý thuyết với mức độ thường xuyên tôi cam kết. Tôi vẫn cảm thấy thoải mái hơn khi cam kết và thúc đẩy trước khi rời khỏi máy tính vì bất kỳ lý do gì. Một số trong đó có thể là nỗi sợ tâm lý trước đây, nói, Máy tính bốc cháy sau khi tôi rời đi và có người quản lý dự án trở lại vào những ngày chúng tôi sử dụng SVN với các nhà phát triển đôi khi không làm gì cả và không ngừng nhắc nhở chúng tôi kiểm tra mã thường xuyên nhất có thể trong khi nhắc nhở chúng tôi rằng mã của chúng tôi là tài sản của công ty. Ngoài ra, nó hiệu quả hơn một chút, đặc biệt là với việc đẩy để quy trình CI của tôi có thể bắt đầu chạy tất cả các thử nghiệm trong khi tôi đi để tôi có thể quay lại và xem kết quả.

Ồ và đôi khi tôi cảm thấy hơi say sau khi rời đi và thường cố gắng viết mã phức tạp trong khi say (mặc dù không phải lúc nào tôi cũng nghĩ ra một hệ thống menu ngữ cảnh thực sự tốt sau khi có một khoảnh khắc eureka trong khi say, nhưng tôi chỉ có 6 loại bia và mã đó không phức tạp lắm). Nếu tôi cố gắng làm điều đó, ít nhất tôi đã cam kết mã được viết một cách tỉnh táo trước khi tôi rời đi để quay trở lại thay vì trộn mã say với mã tỉnh táo, tại đó nhật ký cam kết của tôi có thể đọc như thế, "Reverting back to code written before Jagermeister shots."tôi không làm điều này rất thường xuyên trừ khi tôi có một cảm hứng mã say rượu, nhưng trong những trường hợp hiếm hoi đó, nó thực sự giúp tôi thực hiện một điều gì đó trước khi tôi ra ngoài và say rượu.


Nguyên tắc chung cho bạn: nếu bạn có hai lần xác nhận liên tiếp với các tin nhắn giống hệt nhau, bạn gần như chắc chắn đã làm sai. Chúng phải là một cam kết hoặc bạn nên tìm hiểu những gì khác biệt về chúng và viết thông điệp nhật ký phản ánh sự khác biệt đó (ví dụ: "xác định dữ liệu sơn mới" và "đặt dữ liệu sơn đúng cách" thay vì "làm việc trên hệ thống sơn" x2).
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.