Sử dụng source control trong Xcode

Việc sử dụng source control ngày càng phổ biến và dần trở thành một công cụ không thể thiếu trong quá trình phát triển sản phẩm. Source control cho phép một người dùng hoặc cả nhóm làm việc hiệu quả, quản lý được toàn bộ quá trình thay đổi của source code. Chúng ta có thể dễ dàng revert lại 1 chức năng mới có lỗi, chia nhánh cho sản phẩm, phát triển các chức năng mới mà không làm ảnh hưởng đến sản phẩm đang chạy thực tế. Source control nổi tiếng và thông dụng nhất hiện nay là Git, nó được hỗ trợ bởi nhiều IDE khác nhau. Trong bài này mình sẽ trình bày sử dụng Git trong Xcode như thế nào đơn giản vì mình là iOS developer. Git là một hệ thống quản lý phiên bản phân tán, được phát triển bởi Linus Torvalds. Điều tuyệt vời của git so với các hệ thống quản lý tập trung như SNV là bạn có thể làm việc với git mà ko cần đến một repository tập trung, mỗi người sẽ có một repository của riêng mình.

Bắt đầu

Để bắt đầu, chúng ta tạo 1 new project trong xcode. Điền các thông số Tiếp đến màn hình tiếp theo, bạn chọn khởi tạo luôn git repository khi tạo project. Nếu ko chọn option này, bạn hoàn toàn có thể git init sau cũng không vấn đề gì. Sau khi tạo xong, Xcode sẽ tạo mới project cũng như git repository để quản lý source code. Tất cả hệ thống quản lý version kể cả Git đều lưu trữ dữ liệu vào một repository. Bạn có thể quản lý project version và theo dõi quá trình phát triển sản phẩm. Phần tiếp theo chúng ta sẽ đi thêm, sửa, xoá trong project. Bạn có thể dễ dàng đọc log của git trong Xcode hơn dùng command line git log. Để đọc git history, chúng ta vào Source Control\ History từ menu của Xcode. Có thể thấy history dễ đọc hơn git log trong terminal rất nhiều. Tiếp theo, chúng ta thay đổi code một chút. Mình thêm một dòng in ra màn hình console đơn giản ở ViewController.swift

      override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        print("Hello Git")
        
    }

Sau khi modify, chúng ta có thể thấy icon "M" ở project navigation bên cạnh file ViewController.swift cho thấy có sự thay đổi trong file này nhưng chưa được commit vào local repository. Tiếp tục thay đổi thêm một số file trong project.

Git Commit

Việc Commit file chưa bao giờ dễ dàng đến thế. Bạn vào Source Control\ Commit... Một cửa sổ mới xuất hiện với phía bên trái là list các file change và bên phải là nội dung thay đổi trong file đó. Các bạn có thể lựa chọn file để commit cũng như thay đổi trên này. Rất tiện lợi so với git command line. Bạn cũng có thể lựa chọn discarddiscard change hoặc không commit một change nào đó bất kỳ một cách dễ dàng. Để commit hoàn thành, chúng ta điền commit message và ấn commit. Bạn có thể check lại history để xem changes: Với Xcode, chưa bao giờ commit lại đơn giản và trực quan như thế như thế.

Git branching

Một feature khác của Git được Xcode hỗ trợ là branch. Mình sẽ không đi quá sâu vào lý thuyết branch là gì vì ai cũng biết branch là gì khi làm việc với git. Khi khởi tạo project kèm với git repository, bạn đang ở branch master. Trong quá trình phát triển phần mềm, chúng ta cần các branch khác như develop, release, hot fix , các feature bracnh. Bây giờ chúng ta tiến hành thêm một chức năng vào example project. Mình tạo một view random color thay đổi màu nền của view controller đơn giản như sau : File ColorViewController vừa được add vào sẽ có icon A. Nó cho biết file này vừa được add vào và vẫn chưa được commit vào repository. Bây giờ chúng ta sẽ tiến hành commit các changes, nhưng chúng ta ko muốn ảnh hưởng đến code hiện tại nên sẽ tạo 1 branch Color để commit chức năng mới add thêm này. Từ menu, chọn Source Control\GitExample\New Branch... Chúng ta có thể thấy current branch hiện tại là master. Tạo mới branch với branch name tương ứng. Bạn sẽ thấy branch đã được tạo và switch qua branch bạn vừa tạo Bây giờ chúng ta có thể commit vào branch mới của chúng ta. Tiếp theo, chúng ta có thể xem list các branch trong local repository bằng cách vào Source Control\GitExample\Configure GitExample . Tại đây các bạn có thể thao tác thêm, xoá branch một cách linh hoạt.

Time travel

Git cho phép bạn lưu nhiều version của project. Tất cả các thay đổi này đều được lưu trữ trong repository. Khi bạn lựa chọn discard changes trên một file, file đó sẽ được đưa về commit gần nhất. Trong suốt quá trình phát triển, project sẽ có rất nhiều commit. Git và Xcode cung cấp cho chúng ta một giao diện cực kỳ dễ thao thác so với git command. Chọn file cần xem lại history. Chọn View\Version Editor\Show Comparison View từ menu. Hoặc có thể chọn nút thứ 3 trên Editor section từ toolbar góc trên bên phải của Xcode. Editor sẽ chia thành 2 phần tương tự như lúc chúng ta commit code. Chức năng này cho phép chúng ta so sánh code cũ và với theo từng commit. Chúng ta có thể chọn các version trước đó từ repository ở phần dưới cùng. Ngoài ra, Xcode còn cho phép chúng ta xem được author của code một cách dễ dàng bằng Blame view. Click và giữ Version editor button, chọn blame. Giao diện của chúng ta sẽ hiển thị như sau Bên góc phải của Editor sẽ xuất hiện blame view với tên người commit, timestamp và commit message. Rất dễ dàng để kiểm tra so với git command line.

Xcode và GitHub

Bây giờ chúng ta sẽ link repository của chúng ta với github. Đầu tiên chúng ta sẽ vào github và tạo repository trên đây Sau khi khởi tạo xong. Chúng ta lấy link remote repository trên github (https hoặc ssh). Tiếp theo vào Source control configurate để set up remote. Đặt tên cho remote và copy link repository vào, ở đây mình dùng link SSH cho tiện. Done. Chúng ta đã sẵn sáng để publish code lên github. Chọn Source Control\Push… từ menu Có thể thấy tên của remote và tên branch và action tạo mới branch trên remote repository. Press push, một màn hình authentication sẽ hiện ra bắt chúng ta xác thực. Ở đây mình có setup sẵn SSH key trên github nên mình chọn option dùng SSH key, bạn có thể dùng username và password bình thường. Quá trình push hoàn tất, chúng ta lên github để kiểm tra xem branch của chúng ta đã lên chưa. Vào github và branch ColorFeature đã xuất hiện. Việc link local repository và remote repository đã thành công. Chúng ta có thể add thêm nhiều remote vào repository local.

Tổng kết

Chúng ta vừa đi qua một số chức năng cơ bản mà Xcode cung cấp cho git. Tuy không mạnh mẽ bằng SourceTree nhưng vừa đủ để chúng ta làm việc nhanh, dễ dàng hơn sử dụng command line. Happy coding!