分步驟圖解如何將Netbeans項目與GitHub代碼庫相同步

作者:愛飛翔(Jeffrey LEE)
原文網址:http://agilemobidev.com/eastarlee/software/netbeans/sync-netbeans-with-github-repository


編修記錄:

2015年7月28日09:05 添加GitHub導航欄的新截圖。
2016年2月16日02:37 強調生成SSH Key時所用的電子郵件地址一定要填寫正確。


這篇教程寫得比較長。Git是個分佈式代碼託管方案,有很多功能和用法。這裡只講了與GitHub倉庫及Netbeans項目有關的一些簡單用法,粗疏之處,敬請諒解。其它的用法,歡迎大家一起來研究。感謝諸位閱讀。

為了防止誤操作,請您先用一些範例代碼做個實驗,待熟悉整個流程之後,再開始正式使用。

為了防止干擾,建議您先關掉Netbeans中的所有項目。

目錄

  1. 創建GitHub代碼庫
  2. 為代碼庫添加協作者(可選)
  3. 生成SSH Key
  4. 添加SSH Key
  5. 創建Netbeans項目
  6. 把項目上傳到GitHub
  7. 解除Netbeans項目與GitHub代碼庫之間的同步關係
  8. 刪除本地的Netbeans項目
  9. 從GitHub倉庫中克隆項目
  10. 將GitHub倉庫中的變更同步到本地的Netbeans項目
  11. 修改本地項目,提交並同步到GitHub倉庫

1. 創建GitHub代碼庫

如果沒有GitHub賬戶,請先去https://github.com/註冊。

進入GitHub首頁,點擊「+ New Repository」按鈕。

在「Repository name」文本框中輸入代碼庫名稱,如果名稱可用,則文本框右側顯示對勾。

點擊「Create repository」按鈕,創建代碼庫。如下圖所示:

創建代碼庫

此時瀏覽器會顯示代碼庫首頁。首頁的網址形式為:https://github.com/username/reponame

其中username為用戶名,reponame為代碼庫名。

2. 為代碼庫添加協作者(可選)

如果要與他人一起管理代碼庫,那就進入代碼庫首頁,點擊右側面板底部的「Settings」按鈕,進入設置界面。

點擊左側面板的Collaborators按鈕。點擊之後可能要再度確認賬戶密碼方能進入。

在文本框中輸入協作者的帳號,如果GitHub中有帳號與您輸入的文字相關,那麼這些帳號就會列在文本框下方。用鼠標點擊您需要的帳號之後,「Add collaborator」按鈕會由灰變亮,點擊該按鈕即可添加協作者。

3. 生成SSH Key

本環節將以Ubuntu系統為例(其它Linux發行版的操作流程也與之類似)。Windows系統的配置方式請參考https://help.github.com/articles/generating-ssh-keys/#platform-windows,Mac系統請參考:https://help.github.com/articles/generating-ssh-keys/#platform-mac

如果本系統以前已經按此步驟生成了SSH Key,那就請跳過這一節。

在Ubuntu系統中按Ctrl+Alt+T,打開終端機。

執行ssh-keygen -t rsa -C "your_email@example.com"命令,其中引號內為註冊GitHub帳號時所用的電子郵件地址

注意:郵件地址一定要寫對。大小寫也要注意。github網站右上角的頭像右方有個倒三角符號,點擊之後會彈出下拉菜單,選擇Settings菜單項,會進入帳號設置界面。點擊左側Personal settings面板中的Emails菜單項,即可在右側的Email界面中看到主郵件地址(primary GitHub email address)。

控制檯提示「Enter file in which to save the key」時,直接按回車鍵。

控制檯提示「Enter passphrase (empty for no passphrase):」時,輸入您想為該SSH Key設置的口令,然後按回車。

控制檯提示「Enter same passphrase again:」時,再次輸入剛纔的口令,按回車。

執行eval "$(ssh-agent -s)"命令。

執行ssh-add ~/.ssh/id_rsa命令,控制檯會提示你輸入口令,也就是剛纔的passphrase。輸入之後按回車,提示「Identity added: ...」則說明執行成功。

4. 添加SSH Key

如果本系統以前已經按此步驟添加了SSH Key,那就請跳過這一節。

在終端機中執行sudo apt-get install xclip命令,這一步要輸入當前Ubuntu用戶的密碼,然後按回車,安裝xclip軟件。

執行xclip -sel clip < ~/.ssh/id_rsa.pub命令,該命令會把一些字符複製到系統的剪貼板裡面。

在GitHub網頁頂端的導航欄中,點擊右側的齒輪按鈕(該按鈕見下圖),進入配置頁面。

GitHub導航欄

翔按:目前的GitHub導航欄已有變化:導航欄最右側的頭像旁邊,有個下拉式菜單,Settings(配置)選項已經集成到了那個菜單裡面,如下圖所示。
新的GitHub導航欄

在左側的「Personal settings」面板中,點擊「SSH keys」按鈕。

點擊「Add SSH Key」按鈕,在下面的「Title」文本框中給這個SSH Key起個名字,例如可以輸入:My Ubuntu Notebook。

把剛纔通過xclip命令複製下來的字符,粘貼在「Key」文本框中。

按「Add key」按鈕,添加好之後,我們會看到頁面中列出了與這個key有關的一些信息。

在終端機裡執行ssh -T git@github.com命令。

控制檯提示「Are you sure you want to continue connecting」的時候輸入yes,並按回車,然後會看到「You've successfully authenticated」等信息,這說明我們可以用這個key與GitHub通信。

刷新GitHub的SSH keys配置頁面,我們會發現代表該key的鑰匙圖標左側,原來灰暗的小圓點已經變綠了。如下圖所示。

SSH Keys列表

5. 創建Netbeans項目

如果只是打算把本地已有的項目上傳到GitHub,而不想新建項目,那就在Netbeans裡打開該項目,然後跳到第6節

如果既不想創建新項目,也不想把已有項目上傳到GitHub,而是想把自己GitHub倉庫中的項目克隆到本地,那就請跳過5、6、7、8四節,直接看第9節

注意,上傳到GitHub公共倉庫中的代碼,可以公開閱覽。如果您不希望別人看到您的項目,那就不要將其上傳。您可以在GitHub上面找個自己感興趣的代碼庫,對其做個分支(Fork),然後跳到第9步

打開Netbeans,點擊「File」菜單下的「New Project…」菜單項。

此處以Java項目為例。我們在「New Project」對話框的「Categories:」列表框中,選擇Java,在「Projects:」列表框中,選擇「Java Application」,然後點擊「Next」按鈕。

在「New Java Application」對話框中,把項目名稱輸入到「Project Name」文本框裡,然後通過「Browse…」按鈕配置項目路徑。建議路徑裡不要有非英文字符。按「Finish」按鈕。

在主Java文件裡面輸入一些代碼,例如:

package com.agilemobidev;

public class HappyChess {
    public static void main(String[] args) {
        System.out.println("Hello, Java.");
    }
}

按F6鍵運行程序,確認該項目能正常運行。

6. 把項目上傳到GitHub

在「Projects」面板裡選中代表本項目的那個根節點。

點擊Netbeans的「Team」菜單,選擇「Git」子菜單下的「Initialize Repository…」菜單項。

在彈出的「Initialize a Git Repository」對話框中,按「OK」按鈕。(翔按:如果您想自己指定倉庫位置,那就請通過「Browse」按鈕來選擇。)

把Netbeans項目上傳到GitHub

在Netbeans左側的Projects面板中,找到表示項目的根節點。

右擊該節點,在彈出式菜單中選擇「Git」子菜單下的「Commit…」菜單項。

在彈出的「Commit」對話框中,把描述本次提交的信息(例如「Create Project’s Main Java File.」)輸入到「Commit Message」對話框中,按「Commit」按鈕。如下圖所示。

提交項目

在Netbeans左側的Projects面板中,找到表示項目的根節點。右擊該節點,在彈出式菜單中選擇「Git->Remote」子菜單下的「Push…」菜單項。

在彈出的「Push to Remote Repository」對話框中,選擇「Specify Git Repository Location」選項,然後把項目的倉庫網址,輸入到「Repository URL」文本框中,該網址的格式為:

github.com:username/reponame.git

其中的username是你的GitHub帳號,reponame是你的倉庫名稱。例如我填的就是

github.com:jeffreybaoshenlee/JavaGameArena.git

在「Username」文本框中輸入git

選擇「Private/Public Key」選項,通過「Private Key File」文本框右側的「Browse…」按鈕來選擇key文件,此文件的路徑一般是:~/.ssh/id_rsa.pub如果連接不上代碼庫,請嘗試~/.ssh/id_rsa),其中的波浪線代表當前Ubuntu用戶的home目錄。

在「Passphrase」文本框中輸入口令。如果不想每次輸入,那麼可以勾選右側的「Save Passphrase」複選框。此時的界面如下圖所示:

上傳到GitHub時所用的配置

點擊「Next」按鈕,如果能夠正常連接,該對話框就會跳轉到下一屏。如果不能,就請檢查密鑰文件和口令是否正確,並看看用戶名填的是不是git。另外請注意,操作系統可能會彈出寫有「輸入解鎖私密金鑰的密碼」字樣的對話框,此時請輸入你原來給key設置的口令。如果不想每次都輸入口令,那就勾選「當我登入時自動解鎖這個金鑰」這一複選框。輸入口令之後,按「確定」按鈕,關閉這個對話框。

在接下來的界面中,勾選「Local Branches」裡面的「master -> master [A]」條目,按「Next」按鈕。

勾選「Remote Branches」裡面的「master -> origin/master [A]」條目,按「Finish」按鈕。

Netbeans會彈出「Set Up Remote Tracking?」對話框,點擊「Yes」按鈕。

刷新GitHub網站的代碼庫主頁,即可看到裡面已經有了文件。

7. 解除Netbeans項目與GitHub代碼庫之間的同步關係

為了在第9步中告訴大家如何從GitHub中克隆項目,我們先通過7、8兩步,在本機上打造乾淨的環境。

如果對這些都不感興趣,那就請直接跳到第10節

點擊Netbeans的「Team」菜單,選擇「Disconnect…」菜單項。

在彈出的對話框中點擊「OK」按鈕。

8. 刪除本地的Netbeans項目

這一步純粹是為了演示而設計的,執行前請務必把項目文件夾備份到別處。

在Netbeans的「Projects」面板裡,右擊代表本項目的那個根節點。

在彈出式菜單中選擇「Delete」菜單項。如果該菜單項不可點選,那就關閉Netbeans,重新啓動再試一次。

在彈出的「Delete Project」對話框中,勾選「Also delete sources under …」條目,點擊「Yes」按鈕。

由於項目之下還有.git目錄尚未刪除,所以我們打開Ubuntu系統的文件管理器,找到代表本項目的文件夾(也就是第5步中配置的項目路徑),把該文件夾刪掉。

9. 從GitHub倉庫中克隆項目

假設你來到自己所擁有的另外一臺電腦上面,想把GitHub倉庫裡的代碼拿下來做開發,或是覺得GitHub上面的某個代碼庫比較有趣,對它做了分支(fork),現在想把分支下載到本地做開發,那就需要進行克隆了。

克隆之前請先保證第3、4兩步已經順利執行完畢

打開Netbeans的「Team」菜單,選擇「Git」子菜單下的「Clone…」菜單項。

在彈出的「Clone Repository」對話框中,把倉庫URL填寫到「Repository URL」文本框中,「Username」文本框中應該是git。

選中「Private/Public Key」選項,按照第6步中的辦法配置好「Private Key File」和「Passphrase」。

在對話框下半部分的「Specify Destination Folder」部分,通過「Browse…」按鈕來指定將要克隆出來的本項目,應該放在哪個文件夾的下面。比方說您想把本項目文件夾定為/projects/java/testgame,那麼就請通過「Browse…」按鈕定位到/projects/java/testgame上一層,也就是/projects/java。選好之後,這部分會出現在「Clone into」文本框中。如下圖所示:

從GitHub倉庫中克隆項目

點擊「Next」按鈕,勾選「Select Remote Branches」下面的「master*」條目。按「Next」按鈕。

在「Clone Name」文本框中輸入本項目文件夾的名字,例如我們要把項目保存到/projects/java/testgame,那麼這裡就填testgame,而「Parent Directory」文本框中顯示的內容,應該就是我們剛纔指定的/projects/java。按「Finish」按鈕。

克隆好之後,Netbeans會彈出「Clone Completed」對話框。點擊「Open Project」按鈕。

在左側「Projects」面板中找到表示本項目的那個根節點。

如果我們原來曾經解除過本項目文件夾與GitHub之間的連接關係,那麼在用鼠標右擊該節點後,彈出式菜單裡不會出現「Git」子菜單。我們需要點擊「Versioning」子菜單下的「Connect to Git」菜單項,如下圖所示。

重新將項目文件夾與GitHub相連

右擊項目根節點,如果能看到「Git」子菜單,則說明項目已正常克隆出來了。

10. 將GitHub倉庫中的變更同步到本地的Netbeans項目

此處的修改,不一定要通過GitHub網頁界面進行。有可能是項目的某位協作者修改了代碼並提交到了GitHub,而你想把修改後的代碼更新到自己電腦上看看。也可能是你在別的電腦中修改了項目,並上傳到了GitHub,現在又想在自己的另一臺電腦裡把修改後的項目更新出來看看。這裡之所以用GitHub界面來講述,只是想舉個例子而已。

在瀏覽器中打開GitHub倉庫的主頁,進入src文件夾,找到某個待修改的源代碼文件(比如Java文件)。

點擊該源碼文件,此時網頁會顯示出文件裡的源代碼。

點擊小鉛筆圖標,修改此文件。該圖標的位置,如下圖所示。

顯示源代碼的網頁

用編輯器來修改該文件。修改好之後,在「Commit changes」下面的文本框裡輸入提交理由,然後按「Commit changes」按鈕。執行此步驟時的界面,如下圖所示。

在GitHub中修改源文件

在Netbeans左側的「Projects」面板中右擊項目根節點,在「Git->Remote」子菜單中選擇「Show Incoming」菜單項,在「Show Incoming」分頁中,點擊工具欄上的「Diff」按鈕,切換到比對模式。在「Revision」一欄中,點擊修訂代號左側的三角符號,即可看到此次修訂所涉及的文件。點擊某個文件,即可在下方看到本地與遠端之間的差別。效果如下圖所示。

對比差別

關閉該分頁。右擊項目根節點,在「Git->Remote」子菜單中選擇「Pull from Upstream」菜單項,即可將遠端倉庫的變更同步到本地項目。

11. 修改本地項目,提交並同步到GitHub倉庫

打開項目中的某個源文件,做出一些修改。運行項目,確認無誤後,準備提交。

右擊「Projects」面板中的項目根節點,點擊「Git」菜單下的「Commit…」菜單項。輸入提交信息,點擊「Commit」按鈕提交。

右擊「Projects」面板中的項目根節點,點擊「Git->Remote」子菜單下的「Push to Upstream」菜單項。如果順利,就會把本地的修改提交到遠端倉庫。

a. 如果遠端倉庫裡還有變更沒有同步到本地,而本地又要往遠端提交,則會失敗。此時彈出「Git Push Failed」對話框。如果確定遠端的新內容不會影響到本次提交,那就點擊「Pull Changes」按鈕。如果不能確定,那就先點擊「Cancel」,然後通過「Show Incoming」界面來比對兩邊的版本,並做出相應處理。

b. 點擊「Pull Changes」按鈕之後,Netbeans會彈出「Merge Commit Needed」對話框,詢問您如何處理當前分支的地位問題。我喜歡選擇「Merge」。

c-1. 如果沒有衝突,那麼接下來會彈出「Remote Changes Pulled」對話框,選擇「Yes」按鈕,完成同步。

c-2. 如果有衝突,那就彈出「Resolve Conflicts」按鈕,此時需要解決衝突。比方說同一個文件,遠端也修改了,本地也修改了,這就衝突了。點擊「Resolve」按鈕,解決此衝突。在「Merge Conflicts Resolver」分頁中,觀察衝突的各個文件。如果接受本地版本,就點擊左欄上方的「Accept」按鈕,如果接受遠端版本,就點擊右欄上方的「Accept」按鈕,如果同時接受兩者,就點擊「Accept Both」。解決完所有衝突之後,點擊分頁右下角的「OK」按鈕。Netbeans會提示保存文件。保存好之後,重新執行執行Commit和Push to Upstream即可。衝突解決界面如圖所示。

衝突解決界面

為了避免上述麻煩,筆者建議大家在Commit之前先通過Show Incoming看一看遠端是否有變更,如果有,而且又和本地的這些變更之間沒有關係,那就執行Pull from Upstream,把遠端的變更先同步下來。這樣Push to Upstream的時候能夠順利一些。

本文先寫到這裡。再次感謝您閱讀。

轉載請註明本文作者,並給出該網頁網址,多謝合作。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s