Bạn có nên cải thiện chất lượng mã trong khi làm việc trên một nhánh tính năng


11

Tôi thực sự thích bài viết này về việc để trang web mã / trại ở trạng thái đẹp hơn bạn tìm thấy - có vẻ như là một cách tiếp cận thực tế trong thế giới thực để giữ sự sạch sẽ của mã.

Tôi cũng thực sự thích các nhánh tính năng như một cách phát triển các tính năng một cách riêng biệt để nếu bạn không thích nó, bạn có thể dễ dàng không hợp nhất nó, v.v.

Tuy nhiên, nếu tôi đang làm việc trên một nhánh tính năng và tôi phát hiện ra một số mã xấu, tôi có nên sửa nó không?

Có cảm giác như có một số mặt trái để sửa nó:

  • Khi tôi hợp nhất nhánh trở lại, diff sẽ bị lộn xộn, lộn xộn với việc đổi tên hoặc trích xuất hàm
  • Nếu tính năng bị từ bỏ, bạn phải chọn cam kết dọn dẹp (có thể hoạt động hoặc không hoạt động tùy thuộc vào cách mã gần đó đã thay đổi tạo ra một sự hợp nhất lộn xộn), làm lại hoặc chỉ từ bỏ nó.

Mặt khác, nếu tôi không làm điều đó trong khi tôi đang ở trong tệp, thì rõ ràng tôi sẽ quên làm điều đó trong một vài ngày khi tôi hợp nhất chi nhánh.

Tôi đã được cảnh báo rằng đây là ý kiến ​​dựa trên (tôi nghĩ rằng thực tế tiêu đề bao gồm should), nhưng tôi cảm thấy như có một câu trả lời (chắc chắn mọi người sử dụng cả hai cách tiếp cận này để họ phải có câu trả lời). Ngoài ra, các câu hỏi về development methodologieschủ đề và tôi nghĩ rằng họ cần một mức độ ý kiến.



@gnat Một đọc hữu ích, cảm ơn. Tôi không nghĩ rằng nó là một bản dupe vì đó là về các nhánh có thời gian dài. Tôi đang hỏi cụ thể về cách dung hòa cách tiếp cận người cắm trại tốt để tái cấu trúc với tính năng nhánh nhánh.
T. Kiley

Nó phụ thuộc vào giai đoạn phát triển của dự án. Nếu dự án đã trải qua một số lượng thử nghiệm hợp lý và được đưa vào thực địa thì tôi nghĩ sẽ rất rủi ro khi thay đổi bất cứ điều gì không phải là một phần của những gì đã được sửa chữa. Nhiều người đã chèn các lỗi thay đổi những thứ không nên ảnh hưởng đến bất cứ điều gì. Nếu dự án đang trong giai đoạn phát triển thì mã càng sạch sẽ bắt đầu tốt hơn, vì vậy có lẽ tôi sẽ dọn sạch toàn bộ tệp nếu cần.
Dunk

Câu trả lời:


8

Bạn chỉ nên 'sửa' mã trong một nhánh tính năng nếu bạn đang thay đổi đoạn mã đó như là một phần của tính năng.

Ví dụ. Tôi đang làm việc với tính năng 'in thỏ' và tôi tìm thấy mã máy in

Public class Printer(string type)
{
    If(type=="bunnies")
    {
        //print a bunny
    }
.....
}

Tôi đổi nó thành:

Public class Printer(string type)
{
     PrintFunctionDictionary[type].Print();
}

Tại sao:

  • Tôi đang làm việc với mã,
  • Tôi cần thay đổi nó để thêm chức năng,
  • chức năng được thêm vào cho thấy một cách tái cấu trúc để giải quyết vấn đề.

Tôi không ngẫu nhiên nhấn một số phần khác của cơ sở mã và 'làm cho nó tốt hơn' như thế này:

  • Đụng độ với những người làm việc trên các tính năng khác.
  • Sử dụng thời gian cần được phân bổ để phát triển tính năng.
  • Thêm mã tùy ý vào một nhánh, nếu tính năng này chưa kết thúc, có thể không được hợp nhất vào sản phẩm chính. Tương tự, nếu tôi khôi phục tính năng này, tôi sẽ mất khả năng tái cấu trúc.

1
Tôi đồng ý rằng đây là một điều tốt để thử, và trong một thế giới lý tưởng, điều này sẽ luôn hoạt động. Tuy nhiên, trong mã thế giới thực, các tình huống thường phức tạp hơn - khi làm việc trên một tính năng, người ta thường có thể tìm thấy các phần của mã có thể đáng được tái cấu trúc độc lập với tính năng. Mã đó có thể can thiệp vào việc triển khai tính năng, nhưng không bị hạn chế đối với các phương thức hoặc các lớp liên quan trực tiếp đến tính năng. Và một sự thay đổi không nhất thiết làm phiền người khác.
Doc Brown

1
tốt, bạn luôn có thể làm một nhánh tái cấu trúc riêng biệt. Như tôi thấy, mặc dù các nhánh tính năng chủ yếu là một thứ quản lý dự án cho phép bạn đi "tính năng X chưa kết thúc nhưng chúng tôi có thể phát hành cùng với tất cả các tính năng khác" và "tính năng X được phát hành" vì vậy chúng tôi không mong đợi tính năng Y thay đổi. Bằng cách thêm tái cấu trúc vào một tính năng, bạn có khả năng phá vỡ những lợi ích này
Ewan

5

Nếu bạn muốn tái cấu trúc của mình "sống độc lập" từ nhánh tính năng hiện tại của bạn, đừng thực hiện các thay đổi ở đó. Thay vào đó, hãy thực hiện tái cấu trúc trên nhánh phát triển chính (hoặc "nhánh tái cấu trúc", nếu thông thường trong nhóm của bạn không áp dụng các thay đổi trực tiếp cho nhánh dev). Vì vậy, bất kỳ ai trong nhóm của bạn (bao gồm cả bạn) đều có thể hợp nhất các thay đổi thành các nhánh tính năng hoạt động mà họ đang làm việc. Tuy nhiên, hãy cẩn thận không áp dụng bất kỳ phép tái cấu trúc toàn cầu nào trong suốt "một nửa cơ sở mã" mà không xin phép đồng nghiệp của bạn trước - họ có thể không vui nếu tái cấu trúc của bạn can thiệp vào công việc hiện tại của họ quá nhiều.

Trường hợp ngoại lệ là ở đây khi các cải tiến bạn thực hiện là cục bộ đối với các phần của cơ sở mã mà bạn chạm chính xác trong nhánh tính năng đó và sẽ không có ý nghĩa gì khi cung cấp cho chúng vòng đời khác với "tính năng mới" của bạn.


3

Mục đích của các branchloại là cung cấp ý định xử lý chúng. Nếu bạn đang theo dõi một phong cách GitFlow phân nhánh, sau đó bạn có thể có các loại như feature, hotfix, release, vv .. Trong trường hợp của một chi nhánh tính năng, nó có ý định là để đóng gói một hợp nhất thành một chi nhánh (ví dụ develop) mà chương trình phát triển chịu trách nhiệm về sáp nhập, tính năng này là gì. Nếu mã bạn đang dọn dẹp không phải là một phần của tính năng đó, đừng thay đổi nó.

Thay vào đó, hãy tìm nhánh thấp nhất có thể mà mã xấu xí nằm trong (có khả năng develop) và nhánh từ đó. Thay đổi mã và đề xuất nó được hợp nhất thành một tính năng. Nếu bạn cần mã đó trong những gì bạn đang làm việc và đặc biệt muốn tránh xung đột hợp nhất, hãy hợp nhất chi nhánh đó vào chi nhánh CỦA BẠN.

Dưới đây là một lời giải thích khá hay về các chiến lược khác nhau: https://www.atlassian.com/git/tutorials/compared-workflows/


0

Nếu tôi đang làm việc trên một nhánh tính năng và tôi phát hiện ra một số mã xấu, tôi có nên sửa nó không?

Có thể tốt để sửa 'mã xấu' trong tầm nhìn, tùy thuộc vào nhịp độ của dự án, 'độ xấu' của mã, v.v., nhưng cố gắng không làm điều này trên chính nhánh tính năng.

  • Nếu nhánh tính năng của bạn là hoàn toàn cục bộ, chỉ cần bỏ qua hoặc thực hiện các thay đổi chưa được lưu, hãy kiểm tra nhánh phát triển, thực hiện thay đổi, sau đó quay lại nhánh tính năng của bạn và loại bỏ phát triển.
  • Nếu bạn không thể loại bỏ phát triển (ví dụ: nhánh tính năng của bạn nằm trên máy chủ công cộng), bạn vẫn có thể chọn lựa phát triển nếu bạn cần hoặc muốn tránh xung đột sau này.
  • Nếu bạn đang chỉnh sửa một tập tin và thực sự phải cam kết sửa chữa vào mã xấu xí ngay bây giờ và thực sự không thể chuyển đổi để phát triển, bạn có thể làm cho việc sửa chữa, sử dụng git add -pđể thực hiện việc sửa chữa, cam kết thay đổi mà chỉ , và trước khi bạn nhập / đẩy (thực sự, tốt nhất là sau lần cam kết tiếp theo của bạn), sử dụng rebase tương tác để di chuyển cam kết đến điểm sớm nhất có thể trong chi nhánh của bạn, hoặc thậm chí có thể chọn cherry để phát triển, tùy thuộc vào lịch sử của bạn.

Tôi cũng sẽ làm điều này với bất kỳ điều gì khác là 'sửa chữa' nhánh phát triển (trong đó 'sửa lỗi' là những thay đổi mà bạn hoặc bất kỳ nhà phát triển nào khác có thể thực hiện để đảm bảo rằng mã tuân thủ các tiêu chuẩn). Điều này có ích...

  • để giữ các bản sửa lỗi và tính năng của bạn cam kết trong các nhóm khác nhau để nhật ký dễ đọc hơn,
  • để giữ cho sự phát triển càng gần càng tốt để có thể giải phóng bất cứ lúc nào và
  • để tránh trùng lặp công việc (nhiều người sửa cùng một vấn đề theo những cách khác nhau tinh tế trên các ngành khác nhau).
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.