跳到主要內容

Linux 中將現有的專案加到 GitHub

按時備份自己的文件或 code 是一個好習慣,以前尚未進入資訊科學這個領域時,最常使用的備份方式大概就是 Copy & Paste + Rename (Ex: Test .txt -> Test_20130723.txt)。這個方法很簡單也很快速,但是,有些小小的問題,如 1. 時間久了檔案佔用會很大的空間,2. 不知道每一個複製的版本究竟修改了什麼,3. 協同合作的時候檔案覆蓋即一去不復返。
上述的問題讓我開始找尋其他的方案來管理程式碼,並且可以與其他人協同合作。幾年前,在 synology 的 NAS 上安裝 SVN Server,開始使用 subversion 做版本管控。SVN 的 Client-Server 架構,在個人使用上倒也還蠻順利,沒出過什麼亂子,直到發生沒有網路就沒有辦法版本更新的事情,才開始注意到分散式版本管控的好處。另外,在 OpenSource 的場合中也常常聽到討論使用 GitHub 作爲 Git Server 的專案,決定來接觸接觸。Git 有下面幾項優點:

  1. 便宜的 Branch:Git 對 branch 是對整個資料夾做快照(snapshot)的方式,追蹤的是檔案的內容,即使在不同的 branch 內也只會有一個實體,所以既省空間又比較有效率。
  2. 聰明的 commit:Git 是與 snapshot 作比對不是單純的使用 diff 來比較 commit 的檔案。
  3. 分散式管理:Git 本地端有自己的 repository,即使沒有連線的狀態下仍然可以 commit,有網路時再 push 到 server 上就好。
  4. Repository 毀壞的風險低:分散式的架構在每一份 Client 都會有一份 repository,即使 Server 上的 repository 毀損還是可以由其他的 Client 端恢復。

在這篇文章中,不討論如何在自己的 Server 上架設 Git Server,會着重在 Linux 中如何把現有的專案加入 GitHub 上。有機會再和大家分享自己架設 Git Server 的經驗 :)

  1. 如果還沒安裝 git,在 uBuntu / Mint 中請輸入
    $ sudo apt-get install git-core在 fedora 中請輸入
    $ sudo yum install git
  2. 設定本機的 Git 環境。設定後會產生 ~/.gitconfig
    $ git config --global user.name "ninthday"
    $ git config --global user.email "your_email@example.com"
  3. 登入 GitHub 帳號,在右上角點選新增一個 repository(Create a new repo)
  4. 填寫資料建立一個完成新增
  5. 由於採用 SSH 方式的安全性較高,這裏以 SSH 作爲例子。首先,產生一個 key 給 GitHub 使用
    $ ssh-keygen -t rsa -f [filename] (ex: ninthday)
  6. 將 key 放到 GitHub 裏面,Account settings -> SSH keys -> Add SSH key
    $ cat ~/.ssh/ninthday.pub把 cat 得到的內容填到 key 中

  7. 設定專門給 GitHub 使用的 key 和 config
    $ vim ~/.ssh/config
    Host github
    HostName github.com
    User git
    Port 22
    identityfile ~/.ssh/ninthday
  8. 測試連線
    $ ssh github
    The authenticity of host 'github.com (204.232.175.90)' can't be established.
    RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'github.com,204.232.175.90' (RSA) to the list of known hosts.
    PTY allocation request failed on channel 0
    Hi ninthday! You've successfully authenticated, but GitHub does not provide shell access.
    Connection to github.com closed.
  9. 取得 GitHub API Token,「Account settings -> Applications -> Personal API Access Tokens -> Create new token 」,複製 token string
  10. 本機設定 GitHub token
    $ git config --global github.user username
    $ git config --global github.token [token string]
  11. 切換到已存在的工作資料夾,輸入初始化指令
    $ cd my_test
    $ git init
    Initialized empty Git repository in /[path]/my_test/.git/
  12. 將檔案加到 repository 的準備狀態
    $ git add *
  13. 檢查一下目前的追蹤狀態
    $ git status
  14. 送交檔案 commit 並加上說明
    $ git commit -m "my first commit"
  15. 在 GitHub my_test repository page 右側複製 URL。在我的例子中是使用 SSH 連接方式。
  16. 將 GitHub repository 加入 remote origin
    $ git remote add origin github:ninthday/my_test.git
    因爲在步驟8中已經設定過連線,所以在這裏把 GitHub 提供的 SSH URL 中的  git@github.com 更換成 github(git@github.com:ninthday/my_test.git -> github:ninthday/my_test.git)
  17. 由 GitHub 上拉下來本機
    $ git pull origin master
  18. 最後將本地端推到 GitHub 上
    $ git push origin master
    大致會出現類似下面的訊息
    Counting objects: 25, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (24/24), done.
    Writing objects: 100% (24/24), 2.21 MiB | 658 KiB/s, done.
    Total 24 (delta 4), reused 0 (delta 0)
    To github:ninthday/myComputing.git
       7696115..b24a89b  master -> master
如果不是使用 SSH 的方式,也可以參考 GitHub 官方的說明

留言

這個網誌中的熱門文章

Word的合併列印如何出現「千分位」符號

今天樓下的同事突然問我一個問題,合併列印的時候如何顯示「千分位符號」(逗號),就是12 , 300。在Excel我們可以很容易的為儲存格裡的數字加上千分位的標記,但是儲存格實際儲存的還是只有數字,那個千分位符號是Excel給我們看的一種「格式」。 當我們在Word裡使用Excel做好的報表來合併列印的時候,Word會最真實的將這個數字欄位給讀出來,呈現在合併列印的欄位數值裡,無論在Excel理事不是有設定千分位符號,在Word合併列印後卻沒有出現,所以我們同樣的必須給他加上格式。 Word裡加上格式並不如Excel裡按一下就完成,加上逗號的千分位格式方法如後: 1.在Word裡插入合併列印的欄位變數。 2.在變數上按滑鼠右鍵,選擇「切換功能變數代碼」(也可以直接按Alt+F9),變數會由 經費 >> 變成 { MERGEFIELD "經費" } 。 3.加上格式就是把 { MERGEFIELD "經費" } 在}前加入數字格式參數 /##,###,會成為 { MERGEFIELD "經費" /# ##,### }(這裡指定五位數,以此類推) #:這個格式項目會指定要在結果中顯示的必要位數;如果結果不含該位數的數字,則 Word 會顯示一個空格。 0:這個格式項目會指定要在結果中顯示的必要位數;如果結果不含該位數的數字,則 Word 會顯示 0 (零)。 4.預覽內容,就可以發現千分位(逗號)出現,如果數值有零的話,最好可以換成 /# ##,## 0 ,避免空格出現。 數字格式參數請參考 Microsoft Office Online 。

使用 Stackedit 發佈至 Blogger

使用 StackEdit 發佈至 Blogger 目前部落格裡新的文章幾乎都是在 StackEdit 上使用 Markdown 來完成撰寫,是一個舒適的撰寫體驗,也更能讓自己專注在文章的撰寫,不用去調整版面上的細節。StackEdit 除了可以將文本直接存在 Google Drive 上,圖形直接嵌入引用 Google+ 相簿,讓整個寫作的流程都是在雲端上完成,另外一個我喜歡的優點,是能夠直接將寫好的文章發佈到自己的部落格上。 發佈至 Blogger 部落格 將文章發佈至 Blogger 上的方法非常簡單,在 StackEdit 的左上角開啓左邊的功能列,拉開 Publish 項目並點選 Blogger,如下圖: 第一次使用時會導引至 Google 的授權頁,回到彈出的對話視窗,填寫好 Blogger 的 URL 內容。新發佈不用填寫 POST ID,這個是未來若需要更新內容的時候使用的。 按下「OK」後就完成發佈的動作,發佈完成後,在 StackEdit 該篇文章的右上角會出現 Blogger 的 Icon。 部落格的樣本改造 文章發佈至 Blogger 後有的模板會有小小的問題,如果我們使用 Markdown 時沒有寫入圖片的最大寬度,插入的圖片若比較大就會造成圖形突破樣板的驚嚇感。 這個可以透過自己改造Blogger 模板內容的 CSS,將圖片最大限制在某個數值。簡單一點的方式,是選擇現在 Blogger 中就已經有限制圖片大小的佈景主題。 程式碼高亮標識 StackEdit 的程式區塊是有支援程式碼高亮標識(Highlight)的功能,預設是使用 Highlight.js 的函式庫,也可以使用 Google prettify。Highlight.js 目前已經支援 118 種的程式語法自動偵測。還有 54 種的 Style 可以選擇。但是發佈至 Blogger 後因模板沒有相關的引入,所以程式碼區塊就和一般的文字一樣,沒有區塊和程式碼標識的區別。 我們可以透過修改 Blogger 的樣板的樣式,引入 Highlight.js 的函式庫與樣式。進入 Blogger 的後臺管理頁面,在左方的選單中選擇 範本 ,然後右方選 編輯 HTML ,開啓樣板的 HTML 編輯畫面。 我們可以在 Highlight.js ...

使用者只能 SFTP 登入自己的家目錄

使用者只能 SFTP 登入自己的家目錄 老師的電腦動畫課堂的期末作品,是開放讓學生透過 FTP 上傳自己的作品及網頁至實驗室的伺服器,由於 FTP 是明碼的封包傳輸於最近升級系統後,便考慮改用 SFTP(SSH File Transfer Protocol)來提供上傳的服務。 提供 SFTP 上傳的同時,希望使用者和以前一樣只能使用 SFTP 無法使用 SSH 登入伺服器。SFTP 為 SSH 的檔案傳輸服務,預設建立帳號的時候使用者同時可以使用這兩種服務。透過 SFTP only + Chroot 設定我們能限制使用者僅能 SFTP 並且無法離開自己的家目錄去到處閒晃。 安裝 OpenSSH 如果安裝的是 Ubuntu Server 應該在安裝過程會安裝 openssh-server 套件,沒有的話可以利用下面的指令安裝。 $ sudo apt-get install openssh-server 新增一個給 SFTP 使用的群組 sftpaccess $ sudo groupadd sftpaccess 修改 OpenSSH 設定檔 編輯 /etc/ssh/sshd_config 設定檔,在約 77 行的地方找到 Subsystem sftp /usr/lib/openssh/sftp-server 註解此行並修改為 Subsystem sftp internal-sftp 。 $ sudo vim /etc/ssh/sshd_config #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp 在檔案的尾端加上下面的片段 Match group sftpaccess ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 建立新的使用者並加入 sftpaccess 群組 在設定檔中,我們設置了 sftpaccess 這個群組套用要做 ChrootDirectory 的設定,所以我們將要限制的使用者,加入這個群組中。 $ sudo useradd ...