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

Github基本使用教学 – 将你的NVIDIA机器学习项目都记录起来吧!

Git简介

介绍github之前先来介绍一下git,git是拿来做版本控制的工具,从下面那张图就可以发现很多人在文件名命名的时候不会做版本控管,这样其实很难知道到底哪一个是最新版本的。

01_file_version_ctrl1_5d47b6176e8af084e0be4af06b40c3c448df0efd.png

所以我们通常在文件名上就会给予版本、功能、时间之类的,让档案第一眼就能看出来版本的差异:

02_01_file_version_ctrl1_bf37a6d810fe7ab9ea5a7c308a8b29905abed78d.png

那如果是项目呢?众多程序代码不可能一个一个地去改名,所以就有git的出现了,他可以协助你管理程序的版本。

03_git_icon1_08192ba39b1005217ea30069fa1f88bdf04d0316.png

那比较常听到的github就是git推出的代管服务平台,使用者可以将项目上传到github中来做版本控管以及协作,而github是个免费开源的平台,所以只要注册账号就可以将你的项目分享至网络上给大家使用,如果不想要公开的话就需要成为github的付费会员。

04_github_icon1_d96440731b7feddcd4e399780bb229b2b5d682d6.png

首先我们要先安装Git,通常会直接侦测到你的计算机版本,当然也可以自行选择要安装的版本,通常我在开发Jetson Nano等开发版的项目,都会先在Windows中写好程序再远程进开发版中执行,所以我先使用Windows版本的git来做介绍:

05_git_official_website1_783223a3c5faeed1f3a3cf15f08120dfdd67510a.png

Git安装过程

基本上一直点选下一步就行了,有几个重点稍微介绍一下,他可以选择Git要用的主要编辑器,Git其实比较偏向Linux端,不管是底层还是操作方式都是,所以比较不推荐第三方的编辑器,或多或少会有些许的问题存在,预设是Vim。

06_part_of_installed1_a2e3c871565fc578ec9098b4b6480bea11d673f1.png

接着会问你是否加入环境变量让第三方的终端机等也能使用,一样选择预设就好,预设的状况下是Git提供的平台以及Windwos的Command Prompt、Power Shell等终端机可以使用。

07_part_of_installed1_ea86424e860b9b1f41c8d58a4532076a37f71345.png

剩下的建议一直下一步即可,像是后端的函式库等等的,安装完之后就会看到开始菜单已经出现Git新安装的软件了,它不仅提供了一个图形化接口的Git

09_git_gui1_18c6295c4812f17d848fd2fc05882aa9fb82173e.png

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

0930_890a20fe2067980a1339ac835436db0866584510.png

而大部分的使用还是会以命令行的方式来运行会比较顺畅,甚至有些功能在图形化的git是无法做到的。

Git操作

前面有说git是为了版本管理而生的,所以我们其实可以针对计算机中的任何一个项目产生git的纪录,那这边我们先新增一个 test_1109 ,接着要先进行初始化,初始化前后的差别在于会出现git的隐藏档:

$ mkdir test_1109

$ cd test_1109

$ git init

$ ls -la

11_git_init2_5576e4a70ae3698a28503ef5e8ce86c750a49c31.png


Git隐藏档中就会藏有各种版本应该有的信息,先知道有这个信息即可,接着透过下列指令来查看目前版本的纪录,我们现在没有任何的档案跟纪录所以会报错是正常的:

$ git log

12_git_log1_e0c89475a51315c5d7dd6331f7154c98c0e1f395.png

我们来尝试做一些更动,先新增一个档案,在linux中可以直接透过touch来新增一个空白的档案,也可以透过vim、nano等编辑器直接新增档案:

$ touch 01.txt

13_git_touch1_8763face2ddae84d136bebfe1e85fee6140dfd23.png

透过编辑器新增档案的差别只在于必须先给一定的内容才会新增,至于编辑器的使用方法先不多作介绍了:

$ vim 02.txt

14_git_vim1_bd701f8ebb3161b3ba6a75317af5a7b49c332e05.png


在linux的指令中可以透过cat来查看档案内容:

$ cat 01.txt

$ cat 02.txt

15_cat1_c626cfd1a87c834024afd24aaf5d2c62cd13902a.png

我们可以透过status来查看现在git的状态:

$ git status

16_cat_status1_822148e1331a10fa2d80ce15547729b1d9b6c7ee.png

可以注意到我们都还没有记录任何版本信息所以会显示「No commits yet」,一旦我们纪录了版本信息,当下所有的档案都会变成被追踪状态;红色的字是文件夹中异动的内容,通常出现红字都是有问题的,这时候的问题就是这些档案没有被追踪的,它也有提供应该要做的解决办法 ( use “git add” to track ),接着我们就需要把刚刚异动的档案都加入追踪,后面接档名、--all、-A:

$ git add {file_name}

$ git add --all

$ git add -A

17_git_add1_47de68639315790f25a2da0a3d8edb988b835f5d.png

在执行一次status就可以看到档案都没有红字了,代表都已经加入追踪,接着就要提供一个说明:

$ git commit -m “add new file”

18_git_commit1_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_login1_0ba344f78eb2ad512d1e7ad5db4b6208145d5644.png

接着只需要输入”git log”就可以查看到刚刚所作的变动,比较特别的地方是每一个说明都会有一组标识符,可以透过这个标识符来直接查看该说明的内容:

20_git_log1_c9fb55f486e5963eb32f5458de7d594e8e482760.png

接着再稍微修改一01.txt的档案,复习一下git的基础操作:

2126_021d99b773b25cc4ec5e2ee8cfddd695feac82b3.png

使用git status查看纪录状态,透过add将档案加入追踪:

2224_054ba0b32b4aa49a0ffae25a807f81507c6c416e.png

接着再给予说明,当我们再次使用log来查看纪录的时候可以发现又多了一笔纪录,可注意到的是标识符也截然不同,在当前的纪录后会有 (HEAD -> master)的字样。

2324_59ef03aaf8dbb73b7843792f5435a7f9c7bc3963.png

既然有了版本管理,那要回复旧版本该怎么办呢?我们透过一个新的范例id.txt来测试一下,首先我在id.txt中添加了chun,接着也增加了 jack,并且用git记录下来两个版本,透过 git log 可以看到有两种版本:

24_revert1_842796ddff86ebee15ee6d2537e14cc8f6d5c6a5.png

接着我们想要回到前一个版本,执行这行之后可以发现id.txt的内容又变回上一步只有chun的内容了:

$ git reset {标识符} –hard

25_revert1_eaf2deb32152f185dbe42b134aeed0f165c67e16.png


常见问题:

26_problem1_40d68947471e5a4bbd66c7e5eed1b07fe26f96df.png

第一个是有时候命令的前面不小心多了一个空白,第二个则是linux跟windows的换行符号不同所导致的需要在输入 “git config –global core.autocrlf false”来关闭自动转换的功能,之后就不会报错了!

Github & Git

27_github1_e619513cec19b2b38337eb1a1d7a7a615529d7ae.png

接着我们要结合github来运作,首先要先登入github,在profile页面中找到repositories,并且点击New来新增一个repositories。

28_repositories1_f7d53bdca4475b85c4569033d2daa123c24125d1.png

进到新增页面之后需要输入repositories的拥有者以及名称,github预设都是公开的,如果要改成私人的话就要付费,其中有几个初始化档案的选项:README、.gitignore、license,README通常为Markdown语法的说明文件,而gitignore则是可以自定义哪些程序或档案不要加入被追踪的行列,而license基本上就是要让其他人使用你的项目的时候能有依据「可以做什么、不能做什么」,这边要注意的是最下面有一个branch (支线)名称我会将其改成 master,再2020年之后原本的master变成了main,但指令的部分老是打错,所以我直接改成master,在setting的部分可以修改。

29_license1_9f14452e2a48e6cad09425a12467a918f123d828.png

将原本的项目文件夹上传至Github

这边我以我近期用yolov5撰写的小项目当作范例~

1.   新建github专案,记下网址

30_repositories_page1_0bfb47155c0e83867212b721e95fad3aac792848.png

2.   开启git bash并前往该项目文件夹执行 git init、git add、git commit等指令

31_git_bash_dir1_c5c54cf13aef3f3812435bfa674202c8bf14cebc.png

3.   透过remote指令将文件夹链接至github,也能使用-v来查看连结的网址:

$ git remote add <name> <url>

$ git remote -v

32_remote1_333de28ce6071f24540764f1ab31b3515c379318.png

4.   连结到之后就可以进行上传 ( push ),在上传之前如果上面已经有档案 (像是README或license) 需要先将数据拉回来 (pull),接着在push出去,都输入完之后就会看到bash的部分开始进行上传。

$ git pull --rebase origin master

$ git push -u origin master

33_pull_push1_4ecae8997bb3f1af51d53559aa707536a6821059.png

34_11_f76a9c921acaf1691d7825bd4b726df32b50e097.png34_21_dc848043da34b4629d779aa8882a72a5c13d830d.png34_31_018c9bbc221bc8dc16e1a6c3e9e262557d07f94b.png

35_push1_6e52dac126e3a735550f36f58a565aa123572943.png

上传之后重新整理可以看到属于master的分支已经更新了

36_result2_11cefe41399685b33d5074196fe3eac5105327ba.png

接着我们可以修改一下README.md再更新一次上传的动作,我在README中加入了一些信息,接着一样透过add、commit完成加入repositories

37_try_again1_82fb8ca533951e00317f018b387d2ebc553a4a3c.png

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

38_try_again1_0cba3d2fd2d5d76fbaaf03f9faf6a5bd13046d85.png

接着就可以看到README文件已经更新成对应的样式:

39_try_again_results1_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