Skip to main content
shopping_basket 购物车 0
登录

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

CAVE Education
0

Git簡介

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

 

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

 

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

 

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

 

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

 

Git安裝過程

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

 

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

 

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

 

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

 

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

 

Git操作

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

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

 

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

$ git log

 

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

$ touch 01.txt

 

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

$ vim 02.txt

 

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

$ cat 01.txt
$ cat 02.txt

 

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

$ git status

 

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

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

 

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

$ git commit -m “add new file”

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

$ git reset {識別碼} –hard


常見問題:

 

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

 

Github & Git

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

 

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

 

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

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

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

 

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

 

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

$ git remote add <name> <url>

$ git remote -v

 


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

$ git pull --rebase origin master

$ git push -u origin master


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

 

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

 

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

 

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

 

結語

其實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