跳到主要內容

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 官方的說明。

留言

這個網誌中的熱門文章

USB裝置無法安全移除解決之道

USB裝置在日常生活的應用上已經越來越普遍,相機、隨身碟、MP3、外接式硬碟等等。當我們在使用了這些設備後,專家都會建議我們一定「 安全的移除硬體裝置 」,尤其在使用了外接式儲存設備以後,正確安全的移除才不會造成設備或資料的毀損,尤其是資料的毀損可就嚴重了。 有時候存取傳送完這些設備後,在移除硬體裝置時會出現「 '一般磁碟區'裝置無法立即停止.請稍候再試 」,這表示還有應用程式還在存取這個裝置,造成無法順利的移除,通常我們只要把存取該裝置的應用程式關閉或移除,有部分軟體需要先把瀏覽到別的資料夾(非外接裝置的資料夾)例如:使用AcdSee、Total Commander之類的軟體。 很多人即使關掉所有的應用程式,無法安全移除的問題還是存在。這是因為系統寫入快取的問題,當寫入資料到外接設備時有些檔案並沒有真正的寫入,而是暫時放到快取,當快取快滿或是要關機時才真正的寫入到外接設備,有時候系統會莫名的忘了寫入...XD,在移除裝置時就會出現上述無法立即停止的錯誤訊息,在網路上爬了一些文,通常這類事件只要 登出再登入 目前的系統使用者帳號就可以獲得解決了。 當然,如果要一直登出登入登出登入,應該會氣到想砸電腦(像辦研討會時,每個講者都是拿USB來插來插去 >. unlocker (236 kb),這款Freeware的軟體,讓你將不需要再當登入登出狂人。 Unlocker 軟體性質: Freeware 最近版本: 1.8.6 作業系統: Windows 2000 / XP / 2003 / Vista 語言界面: 繁體中文 原創公司: Cedrick 'Nitch' Collomb >> Download 滑鼠右鍵 ,在右鍵選單中會多了一個Unlocker的選項,點選Unlocker,這時就會看到是什麼程式或程序還在使用此設備,點選該程式選「 解鎖 」,完成後應該就可以順利在系統列上安全的移除硬體裝置了。

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 。

使用者只能 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 ...