Mã tạm thời nên được đặt dưới sự kiểm soát phiên bản và làm thế nào?


29

Dưới đây là một số ví dụ về mã tạm thời / cục bộ. Nó là cần thiết để làm việc với codebase, nhưng sẽ có hại khi là một phần của nó:

  1. Hồ sơ dự án. Các đường dẫn có thể cần được chỉnh sửa để phản ánh bố cục trên PC hiện tại.
  2. Makefiles. Ví dụ tối ưu hóa có thể cần phải tắt trong quá trình gỡ lỗi, nhưng không phải cho máy chủ CI.
  3. Những cái hack xấu xí bẩn thỉu. Ví dụ: return 7ở giữa một chức năng, để kiểm tra một cái gì đó, tùy thuộc vào chức năng và bị nghi ngờ phá vỡ ở giá trị 7. Hoặc 7 là mã của nút chưa được triển khai, tôi đang triển khai và cần kiểm tra trong suốt cuộc sống của chi nhánh của tôi.

Tôi đã cố gắng giữ những người trong một cam kết git rằng tôi luôn nổi loạn lên đầu trước khi đẩy lên repo và sau đó đẩy HEAD~. Điều này khá bất tiện và không hoạt động với svn. Stashing làm tôi sợ hơn nữa - "tôi có nhớ bật lên sau khi đẩy không ??".

Giữ mã ngoài kiểm soát phiên bản sẽ gây ra tiếng ồn khó chịu mỗi khi một cam kết được lắp ráp cộng với nó có thể vô tình được đưa vào một cam kết vào tối thứ sáu.

Điều gì sẽ là một giải pháp lành mạnh cho mã vứt đi như vậy?


Mã tạm thời này có cần được cập nhật từ dự án ban đầu trong thời gian sử dụng tạm thời không?
JeffO

@JeffO, không chắc tôi có hiểu bạn không. Các đoạn bẩn là nhỏ và hiếm khi đụng độ với mã đang được phát triển. Tuy nhiên, @ Blrfl, rất nguy hiểm khi họ được đưa vào dòng chính. Hãy tưởng tượng return 7vào một trunkbuổi tối thứ Sáu, sau một sự hợp nhất tệ hại trong cái nóng mùa hè.
Vorac

@Vorac - đó là những gì mã đánh giá và thử nghiệm dành cho! Tôi có thể cho bạn thấy điều tồi tệ hơn thế - mã không hoạt động mặc dù thoạt nhìn nó có vẻ tốt. Return 7.. nếu chỉ có họ là quá rõ ràng!
gbjbaanb

@Vorac: Đó là một nhận xét triết học hơn bất cứ điều gì khác.
Blrfl

2
Có cách nào để nói bạn đang ở trong môi trường nào không? Ví dụ: bạn có thể thiết lập nó để thực thi mã nếu nó phát hiện ra bạn đang ở trong môi trường dev, nhưng không phải trong val / prod. Bằng cách đó, bạn không phải liên tục thêm / xóa mã giữ chỗ khi cam kết.
Saggio

Câu trả lời:


46

Tất cả các mã là tạm thời. Khi tôi thực hiện thay đổi, thỉnh thoảng tôi sẽ giới thiệu trình giữ chỗ - biểu tượng mà tôi đã chờ đợi người thực sự từ nhà thiết kế, chức năng tôi biết sẽ gọi thư viện mà đồng nghiệp của tôi đang viết và chưa kết thúc (hoặc đã bắt đầu), việc ghi nhật ký bổ sung sẽ bị xóa hoặc có điều kiện khác, các lỗi mà tôi sẽ khắc phục để khắc phục một khi chúng được nhóm thử nghiệm nhận thấy, v.v.

Vì vậy, hãy kiểm tra mọi thứ trong. Sử dụng một nhánh tính năng cho tất cả sự phát triển của bạn, sau đó bạn có thể hợp nhất phiên bản cuối cùng vào thân cây và không ai sẽ cần biết những gì hack và bodges và sửa lỗi bạn đã thực hiện trong chu kỳ phát triển của mình, họ sẽ chỉ cần xem phiên bản cuối cùng Nhưng nếu bạn đã cam kết với chi nhánh của mình thường xuyên, bạn sẽ có thể thấy những điều đáng để lưu giữ nếu một ngày bị trục trặc một cách ngoạn mục hoặc bạn tiếp tục viết mã sau giờ ăn trưa ở quán rượu.

Kiểm soát phiên bản không phải là kho lưu trữ nhân tạo hoặc hệ thống lưu trữ tài liệu. Đó là về việc giữ lịch sử của những thay đổi. Dán mọi thứ bạn thích vào đó vì một ngày nào đó bạn có thể muốn xem nó là gì và đó là những ngày bạn nhận ra SCM của bạn thực sự là về cái gì.

Tái bút Các tệp tạm thời thực sự (ví dụ: .obj hoặc xây dựng các tạo phẩm) không có chỗ trong SCM của bạn. Đây là những thứ không có giá trị với bất cứ ai. Bạn có thể nói chúng là gì - nếu bạn xóa chúng, bạn không bận tâm, hoặc thậm chí nhận thấy chúng đã biến mất.


5
Đã đồng ý. Nhánh là con đường để đi. Tạo một nhánh, làm bất cứ điều gì bạn muốn ở đó và hợp nhất mã hoàn thành khi nó hoàn thành. Đầu nên được coi là phiên bản phát hành mà khách hàng có thể tải xuống và sử dụng bất cứ lúc nào.
Cameron McKay

Câu trả lời tuyệt vời, từ những gì tôi thấy, GIT đã giới thiệu phiên bản địa phương một phần để giúp mọi người muốn có một bản ghi công việc địa phương của họ. Mã tạm thời phải ở trong máy của nhà phát triển cho đến khi anh ta sẵn sàng đưa chúng vào repo
InformedA

2
Tôi sẽ in ra một tấm áp phích lớn ghi "TẤT CẢ MÃ LÀ TẠM THỜI" và dán nó lên tường. Có lẽ là trong Comic Sans.
Bob Tway

2
@MattThrower trong một trích dẫn bong bóng, đến từ đôi môi của Clippy?
gbjbaanb

1
Mã không chạy hoặc mã không biên dịch không nên được cam kết kiểm soát phiên bản.
Tulains Córdova

17

Hồ sơ dự án. Các đường dẫn có thể cần được chỉnh sửa để phản ánh bố cục trên PC hiện tại.

Đối với các tệp dự án, chiến lược tốt nhất là khi bạn có thể tạo tệp dự án thông qua một tập lệnh. Thêm tệp dự án thực tế vào bỏ qua của bạn và chỉ cần tạo lại tệp dự án khi cần thiết. Ví dụ, trong các dự án Java, tôi sử dụng gradle có thể tạo ra một dự án nhật thực.

Makefiles. Ví dụ tối ưu hóa có thể cần phải tắt trong quá trình gỡ lỗi, nhưng không phải cho máy chủ CI.

Bạn sẽ có thể chuyển đổi giữa chế độ tối ưu hóa và gỡ lỗi mà không cần sửa đổi Makefile của mình. Thay vào đó, sử dụng cờ dòng lệnh, biến môi trường hoặc tệp riêng biệt không có trong kho lưu trữ của bạn để kiểm soát điều đó.

Những cái hack xấu xí bẩn thỉu. Ví dụ trả về 7 ở giữa một hàm, để kiểm tra một cái gì đó, tùy thuộc vào hàm và bị nghi ngờ phá vỡ ở giá trị 7. Hoặc 7 là mã của nút chưa được triển khai, mà tôi đang thực hiện và cần phải kiểm tra trong suốt cuộc đời của chi nhánh của tôi.

Bạn không thể viết một bài kiểm tra gây ra trường hợp nghi ngờ thất bại?

Trong hầu hết các trường hợp, bạn sẽ có thể điều chỉnh quy trình làm việc của mình để bạn không thực hiện những thay đổi này đối với các tệp trong kho lưu trữ của mình. Những tệp được thay đổi cục bộ nên được thêm vào cơ chế bỏ qua dự án của bạn và không có trong kho lưu trữ. Trong một số trường hợp, bạn vẫn sẽ thực hiện các thay đổi tạm thời mà bạn không muốn đưa vào kho lưu trữ. Đối với những người đó, hãy thêm một chuỗi đặc biệt như: XXX và thêm một móc nối trước cam kết từ chối các cam kết vẫn còn trong đó.


Đôi khi tôi cần thực hiện các bản hack nhỏ vào một tệp, đồng thời viết mã sản xuất trong cùng một tệp. svnkhông hỗ trợ cam kết một phần tập tin, vì vậy đó là một nỗi đau trong những tình huống đó. Hầu hết các đồng nghiệp của tôi chỉ thực hiện các vụ đột nhập vào chi nhánh và thanh trừng họ tại hợp nhất trunk. Tuy nhiên, tôi bị phân tâm (và phạm sai lầm trong quá trình sáp nhập, và sáp nhập trong svn là cách thiêng liêng và bất biến) dễ dàng hơn và do đó câu hỏi này.
Vorac

@Vorac, tôi sẽ xem xét các móc nối lật đổ cho phép bạn chạy các tập lệnh khi cam kết. Có thể viết một tập lệnh từ chối hợp nhất nếu nó chứa XXX hoặc một cái gì đó tương tự.
Winston Ewert

1
@Vorac: Nếu bạn sử dụng TortoiseSVN, bạn có thể sử dụng Khôi phục sau khi cam kết trên một tệp để cam kết một phần, sử dụng công cụ tìm khác biệt hoặc trình chỉnh sửa của bạn để tạm thời xóa các khối bạn không muốn cam kết, sau đó cam kết. Rùa sẽ khôi phục tập tin đầy đủ ngay sau đó và bạn có thể cam kết các khối còn lại nếu sẵn sàng. Điều này có thể được thực hiện bằng cách tạo một bản sao lưu nhanh chóng của tệp và khôi phục nó sau lần cam kết đầu tiên.
leokhorn

5

Kiểm soát phiên bản nên chứa mã và cấu hình cần thiết để xây dựng ứng dụng.

Điều này có nghĩa rằng:

  • Nội dung tạm thời được giới thiệu trong một khoảng thời gian ngắn (thời gian cần thiết để xác định vị trí của lỗi hoặc để thử nghiệm tính năng của ngôn ngữ chẳng hạn) không nên có trong kiểm soát phiên bản: giữ nguyên cho đến khi bạn cần nó, sau đó chỉ cần loại bỏ nó khi thực hiện cam kết .

  • Các tệp cục bộ phù hợp với một máy cụ thể có thể được lưu giữ trong một nhánh.

    Tôi sẽ tránh giữ chúng chỉ cục bộ, vì quá đau đớn để làm lại tất cả những thứ này khi máy tính xách tay của bạn bị đánh cắp hoặc virus buộc bạn phải cài đặt lại hệ điều hành (và nhân tiện, bạn thấy rằng bản sao lưu cuối cùng của bạn đã được thực hiện hai năm trước) .

    Mặt khác, hãy cẩn thận với cấu trúc tệp: cấu hình cục bộ là OK, cho đến khi nó trở nên quá tải và buộc bạn phải thực hiện một thay đổi duy nhất trong mỗi tệp của mỗi 42 nhà phát triển tham gia dự án.

    Theo dõi cơ hội để loại bỏ các đặc tính giữa các máy. Nó có thể có nghĩa là:

    • Cấp quyền truy cập vào máy chủ dev SQL để thay thế các phiên bản cục bộ trên các máy của nhà phát triển,

    • Sử dụng dịch vụ phân phối gói như Pypi hoặc NPM đối với các gói công cộng và các đối tác tư nhân của họ đối với các gói trong nhà,

    • Yêu cầu các thành viên của nhóm cài đặt các phiên bản phần mềm giống nhau,

    • Thực hiện cập nhật phần mềm càng minh bạch càng tốt,

    • Hoặc cho phép triển khai HĐH và phần mềm cần thiết trên máy chỉ bằng một cú nhấp chuột (cộng với thời gian để mọi nhà phát triển cài đặt Vim so với Emacs, Chrome so với Firefox, v.v.)

Vì thế:

Hồ sơ dự án. Các đường dẫn có thể cần được chỉnh sửa để phản ánh bố cục trên PC hiện tại.

Tại sao không sử dụng cùng một bố cục trên mọi PC? Các đường dẫn trong dự án nên liên quan đến tệp dự án, điều đó có nghĩa là không quan trọng dự án nằm ở đâu. Các phiên bản của phần mềm và thư viện tốt hơn là giống nhau để tránh các lỗi khó hiểu chỉ xuất hiện trên một số máy và không thể sao chép cho các thành viên khác trong nhóm.

Thí dụ:

Trong một dự án được tạo bằng Visual Studio, bạn có thể tìm thấy:

  • Các tập tin chính họ. Đường dẫn là tương đối, không quan trọng cho dù trên máy của tôi, dự án được đặt trong H:\Development\Hello World Project\khi các thành viên khác trong nhóm đã kiểm tra dự án C:\Work\HelloWorld\.

  • Các phụ thuộc, tức là thư viện bên thứ ba và trong nhà. Cả hai loại nên được xử lý bởi NuGet, điều này làm cho tất cả các cuộc thảo luận liên quan đến xung đột trở nên lỗi thời. Nếu bạn không có cùng phiên bản thư viện tôi có, hãy yêu cầu NuGet cập nhật các phụ thuộc. Đơn giản như vậy (khi nó hoạt động tốt, không phải lúc nào cũng như vậy).

    Lưu ý rằng điều quan trọng là phải giữ các thư viện nội bộ trong NuGet riêng. Có một loạt các thư viện được lưu trữ trong một thư mục dùng chung hoặc được gửi qua e-mail trên một nhóm dẫn đến các máy chủ CI vô chính phủ và trầm cảm.

  • Các thiết lập. Điều quan trọng là nhóm chia sẻ các cài đặt tương tự. Nếu một nửa nhóm quyết định coi các cảnh báo là lỗi và một nửa nhóm giữ cảnh báo như hiện tại, các thành viên của phần đầu tiên của nhóm sẽ dành thời gian để loại bỏ các cảnh báo do các nhà phát triển tạo ra từ phần thứ hai của nhóm.

  • Các cài đặt liên quan đến tiện ích. Đó là những điều khó khăn, bởi vì một số thành viên của nhóm có thể đã cài đặt một số tiện ích, trong khi những người khác thì không.

    Chúng tôi khuyên bạn nên cài đặt bộ công cụ tương tự. Nếu một số lập trình viên muốn sử dụng StyleCop, nhưng những người khác thì không, nhóm sẽ không hoàn thành công việc. Nếu một số sử dụng hợp đồng Mã nhưng những người khác thì không, họ sẽ có cùng các vấn đề.

Makefiles. Ví dụ tối ưu hóa có thể cần phải tắt trong quá trình gỡ lỗi, nhưng không phải cho máy chủ CI.

Giữ một số makefile trong kiểm soát phiên bản. Nó không phải là bất thường để xây dựng một phiên bản gỡ lỗi trên máy chủ CI và để đẩy nó đến một máy khách gặp lỗi khó khăn.

Những cái hack xấu xí bẩn thỉu. Ví dụ trả về 7 ở giữa một hàm, để kiểm tra một cái gì đó, tùy thuộc vào hàm và bị nghi ngờ phá vỡ ở giá trị 7.

Tôi sẽ tránh mã như vậy ở nơi đầu tiên. Để kiểm tra một cái gì đó, sử dụng các bài kiểm tra đơn vị. Nếu nó thực sự mất vài giây để trao đổi một số mã cho mục đích gỡ lỗi , thì hãy thực hiện nó, nhưng dù sao bạn cũng sẽ xóa mã này trong vài phút, do đó không cần phải cam kết.

Khi bạn mô tả nó, bạn nên viết một bài kiểm tra. Ví dụ: nếu bạn muốn chắc chắn rằng:

class TemperatureConverter
{
    public int CelsiusToFahrenheit(int temperature)
    {
        ...
    }
}

ném một ngoại lệ khi temperaturekém hơn AbsoluteZerohằng số, bạn không nên chơi với chính mã. Thay vào đó, hãy tạo một bài kiểm tra đơn vị sẽ:

  • tự ghi lại mã của bạn,
  • tăng độ tin cậy của mã của bạn,
  • đảm bảo rằng các nhà bảo trì có thể dựa vào kiểm tra hồi quy khi sửa đổi phương pháp trên,
  • phục vụ cho các nhà phát triển khác trong nhóm của bạn, những người có thể cần thực hiện bài kiểm tra tương tự.

2
Thật không may, tôi không có kinh nghiệm với các bài kiểm tra viết. Nền tảng hiện tại liên quan đến một cpu ARM, cấu hình một số phần cứng để đáp ứng với các lệnh USB. Không có phản hồi từ phần cứng đến cpu.
Vorac

2
Nếu mã tạm thời có thể có các hiệu ứng liên tục, ngay cả khi mã không bao giờ cần thiết một khi các hiệu ứng đó đã đạt được, tôi nghĩ rằng việc giữ mã ở đâu đó sẽ là khôn ngoan trong trường hợp có câu hỏi liệu các hiệu ứng có đạt được chính xác không. Ví dụ: nếu một số định dạng cơ sở dữ liệu cho một sản phẩm bị thay đổi trong khi nó đang được phát triển, người ta có thể viết một tiện ích một lần nhanh chóng để thay đổi định dạng. Tiện ích có thể không bao giờ cần thiết sau khi cơ sở dữ liệu còn tồn tại ở định dạng cũ được chuyển đổi, nhưng dù sao cũng có thể cần phải kiểm tra cách chuyển đổi được thực hiện.
supercat

Đối với các tệp dự án Visual Studio, tôi đã có kinh nghiệm tốt khi tạo chúng bằng CMake, cho phép linh hoạt về chính xác cách mã nguồn và mã được biên dịch được đặt trong hệ thống tệp. Sau đó, tôi kiểm soát phiên bản các tệp đầu vào CMake thay vì các tệp dự án VS. Nhưng điều này vẫn phù hợp với chuyên gia của bạn, "Kiểm soát phiên bản nên chứa mã và cấu hình cần thiết để xây dựng ứng dụng." Tôi hoàn toàn đồng ý với điều đó!
David K

Với VS, đôi khi bạn cần phải cẩn thận để đảm bảo rằng bạn không có đường dẫn tuyệt đối lén lút. Tôi đã gặp phải một số vấn đề với các tham chiếu bị lỗi khi nâng cấp lên win64 và có thư viện cho nền tảng của bên thứ 3 chuyển từ C:\Program Files\...sangC:\Program Files (x86)\...
Dan Neely

@DanNeely: đó là lý do tại sao các thư viện của bên thứ ba nên được xử lý bởi NuGet.
Arseni Mourzenko

2

Chúng tôi sử dụng @@ ý kiến ​​trong mã để chỉ ra bất cứ điều gì chưa sẵn sàng, cho mục đích thử nghiệm, v.v.

Bằng cách đó, chúng tôi có thể cam kết, các đồng nghiệp không phải chờ quá lâu để đồng bộ hóa và có thể thấy nơi vẫn đang hoạt động (ví dụ: hiểu tại sao một phần vẫn chưa hoạt động đầy đủ).

Chúng tôi thực hiện tìm kiếm toàn cầu @@để ngăn chặn bất kỳ 'thức ăn thừa' nào trước khi bước vào giai đoạn thử nghiệm beta cuối cùng, v.v.

Sử dụng kỷ luật đó, tôi thấy không có lý do gì để không chỉ cam kết. Theo cách này, chúng tôi không có các nhánh riêng biệt và chỉ có một 'giao thức' bổ sung để theo dõi.


Là một lợi ích bổ sung, những việc cần làm (thường là những việc nhỏ) luôn nằm trong mã. Nhà phát triển làm việc với họ có thể nhanh chóng vượt qua họ và không cần phải giữ các danh sách riêng biệt.
Bạn biết sự phát triển diễn ra như thế nào: bạn đang làm việc ở một nơi nhưng bạn liên tục sử dụng tâm trí của mình như một chồng (' Tôi nên thay đổi điều đó ở đó khi tôi hoàn thành ở đây '). Chỉ cần ghi lại một cách nhanh chóng@@ nhận xét ngăn chặn tràn ngăn xếp.

Tôi thậm chí sử dụng @@nameđể chỉ ra các vấn đề mà tôi cần thảo luận với 'tên'.


1

2 giải pháp HAMSTER:

  • Bạn có thể sử dụng hook pre-commit để kiểm tra mã của mình cho một số từ khóa bất thường như HAMSTER. Chỉ cần đừng để mọi người cam kết mã đã bị HAMSTERed và sử dụng nó bất cứ khi nào bạn thực hiện các bản hack bẩn.

  • Một tùy chọn khác ví dụ trong C là sử dụng #ifdef HAMSTER, sau đó mã sẽ chỉ chạy trên máy của bạn nơi bạn có cờ trình biên dịch HAMSTER.


0

Chúng tôi đặt mọi thứ dưới sự kiểm soát nguồn cần thiết để xây dựng và kiểm tra các nhị phân hiện tại và hiểu lý do tại sao mọi thứ được thiết kế / thực hiện / kiểm tra theo cách chúng đang hoạt động.

Điều đó thậm chí giữ cho gai http://www.extremeprogramming.org/rules/spike.html , giống như những gì bạn mô tả; chúng tôi chỉ lưu trữ chúng trong một cây con khác.


0

Dưới đây là một số giải pháp tôi thỉnh thoảng sử dụng bản thân trong các trường hợp khác nhau và bạn có thể xem xét hữu ích khi áp dụng cho quy trình công việc của riêng mình:

  1. Cành nhẹ có thể bị bẹp.

    Git là tuyệt vời ở đây. Hack trên một nhánh, thực hiện nhiều cam kết, sau đó rebase hoặc xóa lịch sử của bạn để chỉnh sửa tiếng ồn.

  2. Sử dụng một hàng đợi vá trên đầu SCM của bạn.

    Tôi thường thấy mình sử dụng StGit để nổi các bản vá lên đầu chi nhánh hiện tại. Khi tôi hoàn thành với nhánh, tôi có thể bật chúng ra khỏi ngăn xếp trước khi hợp nhất, đè bẹp hoặc nổi loạn hoặc tôi có thể hợp nhất chúng vào cơ sở mã chính nếu tôi muốn giữ chúng xung quanh.

  3. Sử dụng RCS như một SCM "ngoài băng" cho các thử nghiệm nhỏ.

    Đôi khi bạn chỉ muốn kiểm tra một tập tin đang được tiến hành theo cách dùng một lần, mà không phải làm sạch lịch sử sau đó. Tôi thường sử dụng RCS cho điều này bên trong Git hoặc SVN. Tôi nói với Git bỏ qua các tạo phẩm RCS, kiểm tra tiến trình công việc của tôi trong RCS và khi tôi thích kết quả, tôi chỉ cần ném các *,vtệp hoặc toàn bộ thư mục RCS. Chỉ không chạy git clean -fdxhoặc tương tự cho đến khi bạn cam kết công việc của bạn với SCM "thực sự" của bạn, hoặc bạn sẽ hối tiếc.

  4. Đặt tên stash.

    Một Git-ism khác, nhưng tiện dụng: git stash save --include-untracked <some-cool-title>có thể hữu ích trong một nhúm. Bạn có thể lưu, bật và áp dụng công việc theo cách này và xem các điểm kiểm tra khác nhau của bạn thông qua git stash listhoặc git reflog --all. Các SCM khác có thể có các tính năng tương tự, nhưng số dặm của bạn có thể thay đổi rất nhiều với cái này.


0

Một số mã tạm thời đó thực sự chỉ là một biểu hiện của phương pháp xây dựng / kiểm tra / phát triển không phù hợp và hy vọng sự tồn tại của chúng sẽ thúc đẩy sự cải thiện trong tương lai.

Trên git ít nhất, bạn nên tự do loay hoay với bất kỳ số nhánh tính năng nào cho đến khi chúng sẵn sàng để được hợp nhất vào master / trunk.

Kiểm soát phiên bản được cho là sẽ giúp bạn, và thường xuyên hơn là tôi không đánh giá cao những hiểu biết về cách thức sai lầm (hoặc có thể chỉ là những quyết định kém trực quan) được đưa ra trong quá khứ và đưa ra quyết định sáng suốt hơn cho hiện tại.


0

Tôi tin rằng một số hệ thống sẽ đưa ra cảnh báo khi thấy TODO trong một bình luận, vì vậy

// TODO: remove this hack.

có thể là tất cả những gì cần thiết nếu bạn có thể tìm thấy một tùy chọn có liên quan trong một phần của môi trường phát triển của bạn hoặc chỉ cần gắn một số loại lệnh grep trong tệp xây dựng của bạn. Cũng có thể sắp xếp cho // HACKhoặc bất kỳ chuỗi tùy ý nào được chọn.

Điều này đơn giản hơn so với việc tổ chức mã của bạn theo một cách cụ thể và hy vọng rằng mọi người sẽ nhớ không sử dụng nó. Nó cũng giúp an toàn hơn khi làm theo lời khuyên của @gbjbaanb (nếu bạn có thể đảm bảo rằng mọi người đều nhìn thấy các cảnh báo!).

Dán mọi thứ bạn thích vào đó vì một ngày nào đó bạn có thể muốn xem nó là gì và đó là những ngày bạn nhận ra SCM của bạn thực sự là về cái gì.


0

Không bao giờ có hại khi đặt mã trong kiểm soát nguồn.

Mỗi một trong số các mục bạn đề cập phải nằm trong kiểm soát nguồn.

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.