Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Giải quyết xung đột hợp nhất với Git (PHẦN 3 )

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Giải quyết xung đột hợp nhất với Git (PHẦN 3 )


    Hợp nhất các branch và giải quyết xung đột hợp nhất

    Bây giờ bạn sẽ thực hiện việc hợp nhất giữa hai branch khác nhau. Fix branch sẽ tối ưu hóa việc tính toán địa chỉ IP đầu tiên và cuối cùng.

    Bước 11:

    So sánh masterfix branches. Sử dụng lệnh git diff.

    student@student-workstation:~/working_directory$ git diff master origin/fix

    diff --git a/calculator.py b/calculator.py

    <... output omitted ...>



    def get_first_ip(self):

    - """ Calculates the first IP address. """

    -

    - first_ip = list(self.network.hosts())[0]

    + network_address = self.get_network_address()

    + first_ip = network_address + 1

    return str(first_ip)



    def get_last_ip(self):

    - """ Calculates the last IP address. """

    -

    - last_ip = list(self.network.hosts())[-1]

    + broadcast_address = self.get_broadcast_address()

    + last_ip = broadcast_address - 1

    return str(last_ip)



    <... output omitted ...>



    Bạn có thể thấy nhiều điểm khác biệt giữa hai branch. Nếu tập trung vào get_first_ip()get_last_ip(), bạn có thể thấy rằng các phương pháp sử dụng code khác nhau để tính địa chỉ IP

    Sử dụng space để xem trang tiếp theo. Nhấn q để trở về shell prompt.

    Bước 12:

    Để sử dụng code từ fix branch cho các phương thức get_first_ip()get_last_ip(), hãy hợp nhất 2 branch, sử dụng git merge.

    student@student-workstation:~/working_directory$ git merge origin/fix

    Auto-merging calculator.py

    CONFLICT (content): Merge conflict in calculator.py

    Automatic merge failed; fix conflicts and then commit the result.

    Bạn có thể thấy rằng tự động hợp nhất không thành công. Git đã cố gắng hợp nhất cả hai nhánh nhưng có những thay đổi trong các dòng giống nhau. Vì tự động hợp nhất không thành công, bạn cần thực hiện giải quyết xung đột hợp nhất thủ công.

    Bước 13:

    Sử dụng git status để xem trạng thái gần đây.

    student@student-workstation:~/working_directory$ git status

    On branch master

    Your branch is up to date with 'origin/master'.



    You have unmerged paths.

    (fix conflicts and run "git commit")

    (use "git merge --abort" to abort the merge)



    Unmerged paths:

    (use "git add ..." to mark resolution)



    both modified: calculator.py



    Git hiển thị giải thích khá tốt về những gì bạn cần làm để giải quyết xung đột. Trước tiên, bạn phải giải quyết tất cả các xung đột trong tệp Calculator.py. Sau khi giải quyết xong xung đột, bạn cần sử dụng lệnh git add để thêm tệp đã giải quyết vào vùng dàn. Sau đó, bạn cần sử dụng lệnh git commit để thực hiện các thay đổi.



    Bước 14:

    Sử dụng lệnh git diff để xem các thay đổi không được hợp nhất tự động.

    student@student-workstation:~/working_directory$ git diff

    diff --cc calculator.py

    index b66f5cc,16cc4eb..0000000

    --- a/calculator.py

    +++ b/calculator.py

    @@@ -19,15 -9,13 +19,25 @@@ class IPCalculator

    return str(self.network)



    def get_first_ip(self):

    ++<<<<<<< HEAD

    + """ Calculates the first IP address. """

    +

    + first_ip = list(self.network.hosts())[0]

    + return str(first_ip)

    +

    + def get_last_ip(self):

    + """ Calculates the last IP address. """

    +

    + last_ip = list(self.network.hosts())[-1]

    ++=======

    + network_address = self.get_network_address()

    + first_ip = network_address + 1

    + return str(first_ip)

    +

    + def get_last_ip(self):

    + broadcast_address = self.get_broadcast_address()

    + last_ip = broadcast_address - 1

    ++>>>>>>> origin/fix

    return str(last_ip)



    def get_broadcast_address(self):

    Bạn có thể thấy phần code nơi xảy ra xung đột hợp nhất. Code giữa điểm đánh dấu <<<<<<< HEAD và ======= là code trong target branch. Trong trường hợp của bạn đó là master branch. Code giữa điểm đánh dấu ======= và >>>>>>> origin/fix là branch nguồn. Bạn cần chỉnh sửa tệp của mình và quyết định code nào sẽ được thêm vào tệp cuối cùng. Có thể bạn sẽ muốn rời khỏi docstrings từ master branch và thêm phương thức tính IP từ fix branch.

    Bước 15:

    Giải quyết xung đột hợp nhất trong Visual Studio Code.

    Để giải quyết điều này, bạn cần quyết định những đoạn nào bạn sẽ giữ lại từ mỗi branch. Giữ code chú thích trong hình sau. Xóa mọi thứ khác bao gồm điểm đánh dấu Git (<<<<<<< HEAD, =======, >>>>>>> origin/fix). Sắp xếp code để hoạt động.

    Click image for larger version

Name:	git 12.png
Views:	23
Size:	30.1 KB
ID:	425449

    Lệnh get_first_ip() and get_last_ip() có kết quả như sau:

    <... output omitted ...>

    def get_first_ip(self):

    """ Calculates the first IP address. """



    network_address = self.get_network_address()

    first_ip = network_address + 1

    return str(first_ip)



    def get_last_ip(self):

    """ Calculates the last IP address. """



    broadcast_address = self.get_broadcast_address()

    last_ip = broadcast_address - 1

    return str(last_ip)

    <... output omitted ...>

    Bước 16:

    Chạy lại câu lệnh python calculator.py -n 192.0.0.0/8



    student@student-workstation:~/working_directory$ python calculator.py -n 192.0.0.0/8

    The result of the calculation is:

    -> Input network: 192.0.0.0/8

    -> Network address: 192.0.0.0

    -> Netmask: 255.0.0.0

    -> Broadcast address: 192.255.255.255

    -> First IP address: 192.0.0.1

    -> Last IP address: 192.255.255.254

    Bạn sẽ nhận ra thời gian đã nhanh hơn lần trước.

    Bước 17:

    Thêm file calculator.py vào Git với câu lệnh git add.



    student@student-workstation:~/working_directory$ git add calculator.py

    student@student-workstation:~/working_directory$



    Bước 18:

    Kiểm tra Git status.

    student@student-workstation:~/working_directory$ git status

    On branch master

    Your branch is up to date with 'origin/master'.



    All conflicts fixed but you are still merging.

    (use "git commit" to conclude merge)



    Changes to be committed:



    modified: calculator.py



    Bạn sẽ thấy rằng calculator.py đang ở trong staging area và chờ commit.

    Bước 19

    Commit file.

    student@student-workstation:~/working_directory$ git commit -m "Merging the fix branch into master branch"

    [master a88f170] Merging the fix branch into master branch



    Thay đổi đã được commit vào master branch.

    Bước 20

    Kiểm tra Git logs. Sử dụng lệnh git log –oneline.



    student@student-workstation:~/working_directory$ git log --oneline

    a88f170 (HEAD -> master) Merging the fix branch into master branch

    aea48d5 (origin/fix) Adding optimization code for get_first_ip() and get_last_ip() methods

    16dd2e0 (origin/master, origin/HEAD) Adding execution code

    a520972 Adding argument parser

    5b49915 Adding the calculate() method to print the results

    fd8cedf Adding docstrings

    4428bae init commit

    Bạn có thể thấy rằng các commit từ fix branch bây giờ là một phần của master branch. Git đã tạo commit hợp nhất với thông báo mà bạn đã chỉ định.

Working...
X