嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

Github基本使用教學 – 將你的NVIDIA機器學習專案都記錄起來吧!

Git簡介

介紹github之前先來介紹一下git,git是拿來做版本控制的工具,從下面那張圖就可以發現很多人在檔案名稱命名的時候不會做版本控管,這樣其實很難知道到底哪一個是最新版本的。

01_file_version_ctrl_5d47b6176e8af084e0be4af06b40c3c448df0efd.png

所以我們通常在檔案名稱上就會給予版本、功能、時間之類的,讓檔案第一眼就能看出來版本的差異:

02_01_file_version_ctrl_bf37a6d810fe7ab9ea5a7c308a8b29905abed78d.png

那如果是專案呢?眾多程式碼不可能一個一個地去改名,所以就有git的出現了,他可以協助你管理程式的版本。

03_git_icon_08192ba39b1005217ea30069fa1f88bdf04d0316.png

那比較常聽到的github就是git推出的代管服務平台,使用者可以將專案上傳到github中來做版本控管以及協作,而github是個免費開源的平台,所以只要註冊帳號就可以將你的專案分享至網路上給大家使用,如果不想要公開的話就需要成為github的付費會員。

04_github_icon_d96440731b7feddcd4e399780bb229b2b5d682d6.png

首先我們要先安裝Git,通常會直接偵測到你的電腦版本,當然也可以自行選擇要安裝的版本,通常我在開發Jetson Nano等開發版的專案,都會先在Windows中寫好程式再遠端進開發版中執行,所以我先使用Windows版本的git來做介紹:

05_git_official_website_783223a3c5faeed1f3a3cf15f08120dfdd67510a.png

Git安裝過程

基本上一直點選下一步就行了,有幾個重點稍微介紹一下,他可以選擇Git要用的主要編輯器,Git其實比較偏向Linux端,不管是底層還是操作方式都是,所以比較不推薦第三方的編輯器,或多或少會有些許的問題存在,預設是Vim。

06_part_of_installed_a2e3c871565fc578ec9098b4b6480bea11d673f1.png

接著會問你是否加入環境變數讓第三方的終端機等也能使用,一樣選擇預設就好,預設的狀況下是Git提供的平台以及Windwos的Command Prompt、Power Shell等終端機可以使用。

07_part_of_installed_ea86424e860b9b1f41c8d58a4532076a37f71345.png

剩下的建議一直下一步即可,像是後端的函式庫等等的,安裝完之後就會看到開始菜單已經出現Git新安裝的軟體了,它不僅提供了一個圖形化介面的Git

09_git_gui_18c6295c4812f17d848fd2fc05882aa9fb82173e.png

也有提供Bash形式的Git,注意這裡使用的都是linux指令像是ls、pwd、touch、cat等基本的Linux指令

0929_890a20fe2067980a1339ac835436db0866584510.png

而大部分的使用還是會以命令列的方式來運行會比較順暢,甚至有些功能在圖形化的git是無法做到的。

Git操作

前面有說git是為了版本管理而生的,所以我們其實可以針對電腦中的任何一個專案產生git的紀錄,那這邊我們先新增一個 test_1109 ,接著要先進行初始化,初始化前後的差別在於會出現git的隱藏檔:

$ mkdir test_1109
$ cd test_1109
$ git init
$ ls -la

11_git_init_5576e4a70ae3698a28503ef5e8ce86c750a49c31.png

Git隱藏檔中就會藏有各種版本應該有的資訊,先知道有這個資訊即可,接著透過下列指令來查看目前版本的紀錄,我們現在沒有任何的檔案跟紀錄所以會報錯是正常的:

$ git log

12_git_log_e0c89475a51315c5d7dd6331f7154c98c0e1f395.png

我們來嘗試做一些更動,先新增一個檔案,在linux中可以直接透過touch來新增一個空白的檔案,也可以透過vim、nano等編輯器直接新增檔案:

$ touch 01.txt

13_git_touch_8763face2ddae84d136bebfe1e85fee6140dfd23.png

透過編輯器新增檔案的差別只在於必須先給一定的內容才會新增,至於編輯器的使用方法先不多作介紹了:

$ vim 02.txt

14_git_vim_bd701f8ebb3161b3ba6a75317af5a7b49c332e05.png

在linux的指令中可以透過cat來查看檔案內容:

$ cat 01.txt
$ cat 02.txt

15_cat_c626cfd1a87c834024afd24aaf5d2c62cd13902a.png

我們可以透過status來查看現在git的狀態:

$ git status

16_cat_status_822148e1331a10fa2d80ce15547729b1d9b6c7ee.png

可以注意到我們都還沒有記錄任何版本資訊所以會顯示「No commits yet」,一旦我們紀錄了版本資訊,當下所有的檔案都會變成被追蹤狀態;紅色的字是資料夾中異動的內容,通常出現紅字都是有問題的,這時候的問題就是這些檔案沒有被追蹤的,它也有提供應該要做的解決辦法 ( use “git add” to track ),接著我們就需要把剛剛異動的檔案都加入追蹤,後面接檔名、--all、-A:

$ git add {file_name}
$ git add --all
$ git add -A

17_git_add_47de68639315790f25a2da0a3d8edb988b835f5d.png

在執行一次status就可以看到檔案都沒有紅字了,代表都已經加入追蹤,接著就要提供一個說明:

$ git commit -m “add new file”

18_git_commit_b2e69b2eed3b9f8c899f3205d92ddb657f9623e8.png

如果你像我一樣第一次使用,會出現這樣的錯誤訊息,原因是還沒登入github使用者,只要登入之後在執行一次就可以了:

 $ git config --global user.email "you@example.com"
 $ git config --global user.name "Your Name"
$ git commit -m “add new file”

19_login_0ba344f78eb2ad512d1e7ad5db4b6208145d5644.png

接著只需要輸入”git log”就可以查看到剛剛所作的變動,比較特別的地方是每一個說明都會有一組識別碼,可以透過這個識別碼來直接查看該說明的內容:

20_git_log_c9fb55f486e5963eb32f5458de7d594e8e482760.png

接著再稍微修改一01.txt的檔案,複習一下git的基礎操作:

2125_021d99b773b25cc4ec5e2ee8cfddd695feac82b3.png

使用git status查看紀錄狀態,透過add將檔案加入追蹤:

2223_054ba0b32b4aa49a0ffae25a807f81507c6c416e.png

接著再給予說明,當我們再次使用log來查看紀錄的時候可以發現又多了一筆紀錄,可注意到的是識別碼也截然不同,在當前的紀錄後會有 (HEAD -> master)的字樣。

2323_59ef03aaf8dbb73b7843792f5435a7f9c7bc3963.png

既然有了版本管理,那要回復舊版本該怎麼辦呢?我們透過一個新的範例id.txt來測試一下,首先我在id.txt中添加了chun,接著也增加了 jack,並且用git記錄下來兩個版本,透過 git log 可以看到有兩種版本:

24_revert_842796ddff86ebee15ee6d2537e14cc8f6d5c6a5.png

接著我們想要回到前一個版本,執行這行之後可以發現id.txt的內容又變回上一步只有chun的內容了:

$ git reset {識別碼} –hard

25_revert_eaf2deb32152f185dbe42b134aeed0f165c67e16.png


常見問題:

26_problem_40d68947471e5a4bbd66c7e5eed1b07fe26f96df.png

第一個是有時候命令的前面不小心多了一個空白,第二個則是linux跟windows的換行符號不同所導致的需要在輸入 “git config –global core.autocrlf false”來關閉自動轉換的功能,之後就不會報錯了!

Github & Git

27_github_e619513cec19b2b38337eb1a1d7a7a615529d7ae.png

接著我們要結合github來運作,首先要先登入github,在profile頁面中找到repositories,並且點擊New來新增一個repositories。

28_repositories_f7d53bdca4475b85c4569033d2daa123c24125d1.png

進到新增頁面之後需要輸入repositories的擁有者以及名稱,github預設都是公開的,如果要改成私人的話就要付費,其中有幾個初始化檔案的選項:README、.gitignore、license,README通常為Markdown語法的說明文件,而gitignore則是可以自訂哪些程式或檔案不要加入被追蹤的行列,而license基本上就是要讓其他人使用你的專案的時候能有依據「可以做什麼、不能做什麼」,這邊要注意的是最下面有一個branch (支線)名稱我會將其改成 master,再2020年之後原本的master變成了main,但指令的部分老是打錯,所以我直接改成master,在setting的部分可以修改。

29_license_9f14452e2a48e6cad09425a12467a918f123d828.png

將原本的專案資料夾上傳至Github

這邊我以我近期用yolov5撰寫的小專案當作範例~

1.   新建github專案,記下網址

30_repositories_page_0bfb47155c0e83867212b721e95fad3aac792848.png

2.   開啟git bash並前往該專案資料夾執行 git init、git add、git commit等指令

31_git_bash_dir_c5c54cf13aef3f3812435bfa674202c8bf14cebc.png

3.   透過remote指令將資料夾連結至github,也能使用-v來查看連結的網址:

$ git remote add <name> <url>

$ git remote -v

32_remote_333de28ce6071f24540764f1ab31b3515c379318.png


4.   連結到之後就可以進行上傳 ( push ),在上傳之前如果上面已經有檔案 (像是README或license) 需要先將資料拉回來 (pull),接著在push出去,都輸入完之後就會看到bash的部分開始進行上傳。

$ git pull --rebase origin master

$ git push -u origin master

33_pull_push_4ecae8997bb3f1af51d53559aa707536a6821059.png

34_1_f76a9c921acaf1691d7825bd4b726df32b50e097.png

34_2_dc848043da34b4629d779aa8882a72a5c13d830d.png

34_3_018c9bbc221bc8dc16e1a6c3e9e262557d07f94b.png

35_push_6e52dac126e3a735550f36f58a565aa123572943.png


上傳之後重新整理可以看到屬於master的分支已經更新了

36_result_11cefe41399685b33d5074196fe3eac5105327ba.png

接著我們可以修改一下README.md再更新一次上傳的動作,我在README中加入了一些資訊,接著一樣透過add、commit完成加入repositories

37_try_again_82fb8ca533951e00317f018b387d2ebc553a4a3c.png

接著直接push上去就可以了:

38_try_again_0cba3d2fd2d5d76fbaaf03f9faf6a5bd13046d85.png

接著就可以看到README文件已經更新成對應的樣式:

39_try_again_results_66eb96e58ba6ec93df5801228e1dd778f0bc4814.png

結語

其實github還有相當多的功能沒有介紹到,本篇文章可以大致了解該怎麼透過github來管理自己的專案,控管自己專案的版本了!好好經營自己的github還是很重要的!

參考文章

 Git - Git 版本恢復與分支管理

CAVEDU Education is devoted into robotics education and maker movement since 2008, and is intensively active in teaching fundamental knowledge and skills. We had published many books for readers in all ages, topics including Deep Learning, edge computing, App Inventor, IoT and robotics. Please check CAVEDU's website for more information: http://www.cavedu.com, http://www.appinventor.tw
DesignSpark Electrical Logolinkedin