Hỏi về quy trình quản lý phần mềm bằng git

Chào mọi người, công việc hiện tại của mình là viết thêm tính năng cho một số open source. Sau khi phát triển xong tính năng, mình muốn push code đó lên git repo cá nhân (github) để lưu lại. Những open source đó đa phần viết bằng c/c++ và build bằng makefile (makefile được tạo từ autoconf và configure.ac). Quy trình hiện tại mình làm là: git clone code từ repo gốc, thêm tính năng (build và test trực tiếp trên branch main), đổi remote và push branch main lên repo của mình. Trước khi push mình đã make clean, tuy vậy code push xong khi clone về máy khác thì build bằng makefile bị rất nhiều lỗi khác nhau. Hiện tại mình đang giải quyết bằng cách tải bản code gốc dưới dạng .rar, viết script thêm file code tính năng của mình vào, nhưng mỗi khi muốn build code trên máy mới lại phải copy thủ công.
Mình muốn hỏi quy trình đúng để quản lý tính năng mới các open source bằng git là gì? Làm sao bản code push lên remote repo build được trên các máy khác?

Cậu có thể kể qua các lỗi hay gặp không?
Biết được nguyên nhân lỗi đó mới có cách khắc phục.

File rar và code trên git có điểm gì khác nhau không cậu?

Nếu cậu làm việc một mình, cậu có thể làm như vậy.
Nhưng nếu cậu làm việc theo team, cậu không nên code trực tiếp vào main branch. Tạo branch riêng của cậu, viết code, build + test trên đó, sau đó chỉ commit và push file code (không phải file build).

Looking forward to hearing from you.

2 Likes

Mình đang làm việc với open source này: ovn-org/ovn: Open Virtual Network (github.com). Đây là repo cá nhân của mình: ahihi8z8z/ovn-min-queue (github.com).

Cụ thể, ban đầu code push lên github khi clone về mình ./configure được nhưng khi make thì bị lỗi do có folder của IDE vscode, mình đã xóa folder này đi và push lại. Tuy nhiên sau đó lại bị lỗi ngay khi khi autoconf

hai@hv1:~/ovn$ ./boot.sh 
configure.ac:21: error: possibly undefined macro: AM_INIT_AUTOMAKE
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:26: error: possibly undefined macro: AM_PROG_CC_C_O
configure.ac:34: error: possibly undefined macro: AM_MISSING_PROG
configure.ac:40: error: possibly undefined macro: LT_INIT
autoreconf: /usr/bin/autoconf failed with exit status: 1

Đây chỉ là một ví dụ, các open source trước mình làm đều bị gặp vấn đề khi push lên git do mình thiếu kinh nghiệm phần này.

File rar thì chỉ có code gốc và các file code tính năng mình thêm. Khi muốn build để test mình sẽ giải nén, copy sang một folder tạm và build trên folder mới này. Khi chỉnh sửa file rar thì minh làm ngược lại, copy các file code mới từ folder tạm vào folder được giải nén từ rar (chưa build) rồi nén lại.

Project đó khá lớn và mình thêm tính năng trên nhiều module, sau khi make clean để xóa file build (file .o), để cho nhanh mình hay “git add .” vào 1 commit rồi push commit đó lên github. Mình đoán lỗi là do mình push lên cả các file được gen ra từ autoconf. Bạn có kinh nghiệm làm việc với các open source như vậy có thể chia sẻ cho mình một ví dụ cụ thể không.

vậy lúc bạn push code, bạn push cả những file không liên quan hay sao?

vậy câu hỏi đặt ra là file rar của bạn nén với những gì bạn push lên git có giống nhau không?

Nó có khác nhau như mình nói (ví dụ như các file code được gen ra mà make clean không xóa đi hết vì bản thân Makefile cũng được gen ra từ file configure.ac), nhưng vấn đề là nó khác ở nhiều file và mình không biết quản lý những file khác nhau này như thế nào.

gitignore?
nếu bạn không quản lý được nó khác nhau như nào thì có nghĩa là bạn không hiểu code
và lúc git add để staging/index change, bạn chỉ cần add những file cần thiết là được mà
nhiều cách mà

giả sử như bạn dùng rar để đưa lên 1 cục như vậy, bạn vẫn không thoát khỏi một trong 2 thao tác trên
tìm xoá hết các chỗ không liên quan => đã biết tìm thì biết phải ignore gì rồi
hoặc lựa những file thay đổi để bỏ vô file rar => biết cần update những file gì thì dùng luôn lệnh git add thôi?

Ok mình hiểu rồi. Tại vì lúc làm việc với rar mình không build trực tiếp luôn ở folder được giải nén ra mà copy vào folder tạm. Có nghĩa là lúc làm việc với git, mình không được build ở main branch cũng sẽ cần build và test ở một branch tạm, sau đó chỉ add những phần code được thêm vào main branch để push lên github.

Cảm ơn mọi người đã giúp mình.

sai rồi, bạn build test các kiểu gì thì cũng kệ, chỉ cần bạn không push những file rác lên là được
giải pháp: .gitignore hoặc chỉ add những file cần thiết
còn chuyện dùng branch nào thì cũng không quan trọng, tự bạn define cho bạn một cái git flow cho phù hợp thôi

Mình dùng file .gitignore có sẵn của code gốc vì mình nghĩ bên phát triển open source họ đã xác đinh những file rác cho mình rồi, nhưng có vẻ như không phải vậy. Để mình thử làm lại theo phương án của bạn.

Mình làm theo hướng dẫn của bạn, code đã build được trên máy khác.
Cảm ơn mọi người đã giúp mình.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?