iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
Mobile Development

Swift30天:從語法到觀念,告訴你在踏入實作前最好弄清楚的那些事系列 第 30

# Day30--Push?Pull?跟GitHub好好溝通溝通

Yo!這應該就是我的最後一篇的鐵人文啦!撒花

其實Git真的很多東西可以說,一下子要講一些細節的操作真的很花篇幅,但偏偏鐵人只有30天,其實要說操作Git這件事情,我個人認為其實在實作的過程真的要用Git做事情,除了本地端用Git自己紀錄自己的東西,其他的就是Git跟GitHub的連結了。

Well,其實自己之前也用過GitHub上傳過資料,但我那個時候不知道Git,所以我就直接把檔案拖曳進去GitHub上,真的超蝦!

都要幹工程師了,總要用一些工程師Skill吧!

那我們就開始囉!

GitHub開個新專案

專案名稱輸入一下:

然後就給它create repository點下去

這個時候就會看到這些詳細的資料,好啦就是說明一些Git的指令:

那這邊主要會有兩種途徑說明:

  1. 全新專案
  2. 現有專案

如果是要做一個全新專案,那就採用上面的:

create a new repository on the command line

如果要上傳新的專案,那就採用下面的

push an existing repository from the command line

好啦,話不多說,來先開個東西:

先創個目錄,然後把一個叫做README的檔案加進去:

然後一樣

git add READ.ed
git commit -m "first commit"

完成之後,我們接下來要設定推上GitHub伺服器的設定了!

需要取用遠端節點的一些資料:
git@github.com:terminal201467/practice-git.git

設定好了遠端節點之後,就來推東西上去吧!

git push -u origin master

等等怎麼推不上去?

try agin:

嗯?看來問題是出在public key,來去看看。

SSH途徑創建金鑰

關於public key是什麼呢?這邊簡單的講一下:其實我們Push在Git裡面做過的紀錄,其中一個過程就是確認git跟GitHub的連接要透過什麼辨認....我的理解是這樣。

所以我們挑選用SSH來作為遠端的辨認的時候,勢必要設定一組Key,來作為我們Push的關鍵。

上面那個錯誤我們其實就是著重於:

git@github.com:Permission denied (publickey).

所以這個時候,就要去創建個key了:

ssh-keygen -t rsa

然後就會出現下面這個畫面,然後就給它按下y,這個時候key就創完了。

然後下面兩個指令也要做一下,把新的ssh-key加進去git裡面

ssh-add
ssh-agent

但最後這個指令一定要輸入,才會產生丟在git上面的金鑰。

cat ~/.ssh/id_rsa.pub

上面這個指令輸完了之後,我們就去GitHub設定SSH金鑰吧:

  1. 點擊Settings

  1. SSH and GPG keys

  2. 新增一個金鑰,然後把剛剛下面這個指令產生的一大堆亂碼貼過去,然後title稍微設一下就可以了

cat ~/.ssh/id_rsa.pub

(下面是完成圖)

然後我們再push一次吧!

git push -u origin master

嗚嗚,好感動,終於把東西push上去GitHub了。

Push完之後,還是要Pull吧?

如果說Push就是把自己在git上的紀錄傳上去,那麼Pull就是把GitHub上的東西拉下來,這個應該很直白。

所以....這個時候要來介紹一個指令:

git fetch

簡單的說,這個指令就是會把GitHub的東西拉下來

那我來試試。

嗯?Nothing happend。

啊,因為GitHub上面的東西跟我現在Git的東西是一樣的齁,所以我要在GitHub上做一些改動。

下面我會新增一個README

然後再試一次:

git fetch

哦!?可以看到上面有一個小小的提示,也就是

master->origin/master

這個可以解讀成,它就是一個從master分出去的分支這樣,
然後進度還比它新,but它並不是一個正式的branch。

這個時候如果要讓Git的進度跟上從GitHub上fetch下來的東西,我們就用一個熟悉的陌生人:

git merge origin/master

如果我們知道Fetch到底在幹些什麼,Pull應該就算更簡單的一件事情了,首先來改一下剛剛的README:

然後:

git pull

這個時候,就會是fetch+merge的結果了,順吧?

然後,其實也有另外一種pull的方式,叫做:

git pull --rebase

這個其實就是fetch下來之後,用rebase的方式去處理,讓整個commit紀錄不用再多出一個,詳情可以去看merge以及rebase的差別。

總之,Push、Pull大概就是這樣的兩個概念,如果這篇文章有幫助到在學Git的大家,應該就值得了XD

完賽小記

嗯,寫到現在大概知道一些Swift與Git的基本技巧與概念,希望可以在實作中更熟習,有時候碰到自己不熟悉的狀況時,還是要上網找或是翻書,這些都會在開發中讓你更有系統地去判斷現在問題的來源!

總之,鐵人賽算是挑戰成功啦XD
下台一鞠躬(撒花

之後應該還會在Medium上努力寫文啦,之後也會思考自己的blog經營的面向會往什麼方向,許多基本的知識前輩們其實都已經寫了很多文章了,或許我可以做的是翻譯?

如果有興趣可以來我的blog逛逛?

https://cute-seagreen-weasel-735.medium.com

我是MJ,咱們下次鐵人賽 or Medium再見。

tags: 鐵人賽

上一篇
# Day29--在某些commit之間再加些commit:我就是欲求不滿,我就是強迫症!
系列文
Swift30天:從語法到觀念,告訴你在踏入實作前最好弄清楚的那些事30
0
南國ㄟ安迪
iT邦新手 5 級 ‧ 2021-10-15 16:51:31

不愧是隊長

30天了還在認真

恭喜完賽!!!!

0
wendy
iT邦新手 5 級 ‧ 2021-10-16 00:24:23

恭喜隊長完賽啊

我要留言

立即登入留言