← 上一章:GitHub 是什麼? 下一章:Pull 下載更新 →
Git教學:如何 Push 上傳到 GitHub?
同場加映:Git 小教室之「如何使用 Git Push 指令只 Push 部份的進度?」
在 GitHub 上開新專案
要上傳檔案到 GitHub,需要先在上面開一個新的專案。請先在 GitHub 網站的右上角點選「+」號,並選擇「New repository」:
接著填寫專案名稱:
- Repository name 可填寫任意名稱,只要不重複即可。
- 存取權限選擇 Public 可免費使用,選擇 Private 則需收每個月 7 元美金的月費。
補充:在 GitHub 被 Microsoft 併購後,現在即使是免費帳號也都可以開立 Private 專案喔。
按下「Create repository」即可新增一新的 Repository。
接下來,會看到的這個引導畫面:
說明:
- 如果是全新開始,請依「create a new repository on the command line」的內容指示進行;如果是要上傳現存專案,則依照「push an existing repository from the command line」選項進行。
- 畫面中間上面,有兩個按鈕可以切換,分別是「HTTPS」以及「SSH」。至於要選擇哪一個可看個人喜好,但選擇 SSH 的話需要設定 SSH Key,SSH Key 的設定可參閱「GitHub 是什麼?」章節介紹。因為我已經有設定好 SSH Key,所以這裡我選擇「SSH」。
同場加映:Git 小教室之「SSH Key 的建立與設定」
如果仔細觀察,便會發現選擇全新開始跟上傳現有專案這兩個選項的最後兩個步驟是一樣的。
假設我們現在什麼都沒有,要重新開始一個專案,找一個空的目錄,就照著它的說明進行。首先,先建立一個 README.md
檔案:
$ echo "# Practicing Git" > README.md
這個 README.md
是 GitHub 專案的預設說明頁面,附檔名 .md
表示它是一個 Markdown 格式,Markdown 語法可以很輕鬆的把純文字格式轉換成 HTML 的網頁格式,如果這是你第一次接觸這個語法,非常推薦花一點時間學習它。
接下來這段,就是我們熟悉的 Git 了:
$ git init
Initialized empty Git repository in /private/tmp/practice-git/.git/
$ git add README.md
$ git commit -m "first commit"
[master (root-commit) adc1a5a] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
到這裡,都還是 Git 的基本招式。如果忘記怎麼操作可參閱「把檔案交給 Git 控管」章節。
在這之前,我們所有的操作都是在自己電腦上,接下來就是要準備把東西推上遠端的 Git 伺服器了。首先,需要設定一個端節的節點,例如:
$ git remote add origin [email protected]:kaochenlong/practice-git.git
說明:
git remote
指令,顧名思義,主要是跟遠端有關的操作。add
指令是指要加入一個遠端的節點。- 在這裡的
origin
是一個「代名詞」,指的是後面那串 GitHub 伺服器的位置。
在慣例上,遠端的節點預設會使用 origin
這個名字。如果是從 Server 上 clone 下來的話,它的預設的遠端節點就會叫 origin
。(關於 Clone 的使用,請參閱「從伺服器上取得 Repository」章節說明)
不過別擔心,這只是個慣例,不用這名字或是之後想要改也都可以,如果想改叫七龍珠 dragonball
:
$ git remote add dragonball [email protected]:kaochenlong/practice-git.git
總之,它就是只是指向某個位置的代名詞罷了。設定好遠端節點後,接下來,就是要把東西推上去了:
$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:kaochenlong/practice-git.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
這個簡單的 Push 指令其實做了幾件事:
- 把
master
這個分支的內容,推向origin
這個位置。 - 在
origin
那個遠端 Server 上,如果master
不存在,就建立一個叫做master
的同名分支。 - 但如果本來 Server 上就存在
master
分支,便會移動 Server 上master
分支的位置,使它指到目前最新的進度上。 - 設定 upstream,就是那個
-u
參數做的好事,這個稍候說明。
如果你能理解上面這個指令的意思,你就可以再做一些變化。例如你的遠端節點叫做 dragonball
,而且你想把 cat
分支推上去:
$ git push dragonball cat
這樣就會把 cat
分支推上 dragonball
這個遠端節點所代表的位置,並且在上面建立一個名為 cat
同名分支(或更新進度)。
回到 GitHub 網站,重新整理一下頁面,剛才那個引導指令的畫面,現在應該會變這樣:
恭喜你,看到這畫面表示你已經順利把你本地專案的東西推到這個遠端的專案裡了。
Git 教學:使用 SourceTree
如果是使用 SourceTree,請按下右上角的「Settings」按鈕,跳出對話框後,選擇「Remote」頁籤:
點選「Add」按鈕:
填寫「Remote name」以及「URL」欄位後,按下 OK 按鈕後,遠端節點即設定完成。接下來要把東西往上推,請點選上面工具列的「Push」按鈕:
勾選你想推的分支,按下 OK 鈕之後就會開始把指定的分支往指定的遠端節點推。成功之後再回來看,現在在 master
分支旁邊就多了一個 origin/master
的分支了:
【冷知識】設定 upstream 是什麼意思
在前面進行 Push 的時候,有加入了一個 -u
參數,表示要設定 upstream 的意思。嗯…問題是,什麼是「upstream」?
upstream,中文翻譯成「上游」。不要被名詞嚇到了,這 upstream 的概念其實就只是另一個分支的名字而已。在 Git 裡,每個分支可以設定一個「上游」(但每個分支最多只能設定一個 upstream),它會指向並追蹤(track)某個分支。通常 upstream 會是遠端 Server 上的某個分支,但其實要設定在本地端的其它分支也可以。
如果有設定,當下次執行 git push
指令的時候,它就會用來當預設值。舉例來說:
$ git push -u origin master
就會把 origin/master
設定為本地 master
分支的 upstream,當下回執行 git push
指令而不加任何參數的時候,它就會猜你是要推往 origin
這個遠端節點,並且把 master
這個分支推上去。
反之,沒設定 upstream 的話,就必須在每次 Push 的時候都跟 Git 講清楚、說明白:
$ git push origin master
否則,光就執行 git push
指令而不帶其它參數的話,Git 會跟你埋怨說不知道該 Push 什麼分支以及要 Push 去哪裡:
$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
【冷知識】如果不想要同名的分支名字該如何更改?
前面提到 Push 的指令是這樣:
$ git push origin master
其實上面這個指令跟下面這個指令是一樣的效果:
$ git push origin master:master
意思是「把本地的 master
分支推上去後,在 Server 上更新 master
分支的進度,或是如果不存在該分支的話,就建立一個 master
分支」。但如果你想推上去之後不要叫這個名字的話,可以把後面的那個名字改掉:
$ git push origin master:cat
這樣當把本地端的 master
分支推上去之後,就不會在線上建立 master
分支,而是建立(或更新進度)一個叫做 cat
的分支了。
Comments