有老師不小心將舊版檔案取代了新版檔案,令之前工作的時間全部浪費了,還要再花時間重做
若果有一套版本控制工作便可以輕鬆管理檔案,即使意外刪除仍可以隨時復原
Git 當然是這種任務的首選工具
Git 是分散式版本控制工具,並不需要中央管理形式的伺服器便可以運作,只需要安裝 Git 的核心功能即可
在 Terminal 輸入
sudo apt-get install git-core安裝 Git 核心
建立 特定資料夾 作為 Git Repository ,在管理上亦比較統一
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWk3ftwgKpN1Mw1Z7RIrDZcUEk1str4V6-FffILvmnCYWv5GZUK1XXh0RzBbznr6PL79dqeCfD4JSeUj322FpNPXnp7pptynI57zTYMHCj55cQTerRt7G7vQ-17dK8hDN7x-mWUNsg720/w600/git-server-01.png)
輸入
git init --bare first.git建立一個稱為 first.git 的 Repository
雖然不一定有 .git 的 後綴 ,但通常都會加上,以表示該目錄是以 Git 建立 Repository
first.git 可以是 相對路徑 或 絕對路徑
若果使用 相對路徑 Repository 便會建立在當前目錄中
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaQxccNaoJAJaRxc7WLHU-cXqk6x3E0VlyLVYN8Jf_kcJaE01UtJ13lWBdYXWW1wHZeVQtcDcFRijjEOcFvlg4Qy8DtgSJiyEWcYQ7xHYJDxDAs3klPmK7eoxVIhaiK0lBz6Z8DZ49k2I/w600/git-server-02.png)
輸入
git clone $USER/Repository/first.git會在當前目錄建立剛才 first 的目錄
由於在下測試時,將 Git Repository 存放左相同使用者的 Repository/first.git 位置
因此目錄位置為 $USER/Repository/first.git
若閣下存放的位置不同需要修改
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwaSe9z0X5CHRiIZN3xBB6St_bDy026GR_WEtXbVzoaNDhKaOqp_0HGkyeTrogaRhj-wvFOzwAiS46yz3oG6jvXYovu4dVu4UyMG1uB1VuFgnMXGHCUq3YjWzkU4Q1C3ViNFnbNmm2tNs/w600/git-server-03.png)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_nJo5Si27gC0D_wR5Kkc4dL6efXeZTzRdosrn8ZfHchcQBvrfbBUMcqnJT-cx9oSj0Uw7Qfj5NR0ea17r4YxT_wVQ9qwztkAbvjGrtdgkbRlUpYnhczCfZD-WrrVNtiVK1E2WfnT4hw/w600/git-server-04.png)
在 first 目錄中建立一些檔案
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvm0ia8bnIKW54ab2uhROOK0ODJOKICfbJOa0RHjQXSiYnm8M-OSiqL4bUfkLi69AMJGXXqPB7rPB1rkH1DnOyqscAdz0edF296X77Rz4SEaCkKzPAVJF4n7VNpWuIU7MqC3uP38BEiSM/w600/git-server-05.png)
輸入
git add .將該目錄中的所有檔案都加入至 暫存區
若不想全部檔案都加入至 暫存區 ,可以指定檔案名,或使用如 * (星號) 之類亦可
甚至分多次 git add 也可以
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTwthbXeAsVZISljDa3TyeB19yzJejxchD8skcBktT_sYYBTdNGu8wnMV6KsyRKUFUpOu0AYlvVCPXG7bCIwwIxUWJDRLMnuKvE_EHN93OOWmAI_5LnH8S0zeUMRuyatcRbEPDT05LqJQ/w600/git-server-06.png)
輸入
git commit -m 'first commit'提供剛才加入至暫存區的檔案
first commit 只是提交檔案的說明文字,可以修改成閣下需要的文字
但由於帳戶第一次使用 Git ,因此需要設定此帳戶的 Git 資料,輸入
git config --global user.email 'your-email' gif config --global user.name 'your-name'your-email 及 your-name 分別填上閣下的 電郵地址 及 名字 ,內容的真確與否則閣下自行輸入
完成使用設定再次輸入
git commit -m 'first commit'便正式提交 暫存區 的檔案
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLes4NzKGcfbRVf5rYd_PwwQT7cnS3MgQ_ilFcvSJpSX629kiICkoUwuuYG_ADVUjh7MTwfj1Id92ku4ErNXUEzYe5M6r_0Y-vr6NI8cod7otlZyWmKbUyMDrRzmMqjo_MZb6Khyphenhyphen_pfB0/w600/git-server-07.png)
輸入
git push -u origin master正式將暫存區的檔案推送到 Repository 儲存
-u 將分支追蹤指定的分支
origin 是 Git 自動產生的 Repository 的名稱
master 是位於 origin 中的分支名稱,可以需要推送到其他分支可以使用其他名稱
若分支是第一次使用會自動建立新的分支名稱
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVf54lQJCfVeyeiBB82hZkyJHM6Z_cmgUPZknyC8xP58zbpO4TygzqHvGNw2xxQOBy8Bl20fANruhJhQPyhzcRfenOQLxJJIRQM3lwKHB3BGMrSYm21ZszZEsIjkHFXS3S3LUZjMyBCUE/w600/git-server-08.png)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDwedw1Yw53O7eLMdQ9wWceR80e_Gk-tCSXPEifqGzZJV1bTE2qQKH-AgLmVlM-4F2cu18N-g_PmgC7uzHT9vX-K84YKJUOCiNLtKz9k8Fh1KLBC0O5xcOl4_Ahm4OmrkhOMb3SpjXyQY/w600/git-server-09.png)
再次更新檔案
再輸入
git add . git commit -m 'second commit' git push由於已經設定 電郵地址 及 名字 ,因此 git commit 不再有警告
之前推送時已經追蹤 origin/master 的分支,若繼續將檔案推送至 origin/master ,可以簡單使用 git push 即可
但由於帳戶第一次使用預設推送方式,因此需要設定此帳戶的預設推送資料
Git 2.0 之前的版本,預設使用 matching 會將所有同名的分支都推送,若只有一個分支問題不大,若超過一個分支全都都推送便可能有些微混亂
若想避免產生潛在影響,可以輸入
git config --global push.default simple使用 simple 只推送正在追蹤的分支
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwaurYACA_rkkW0CxSqbNm22edtQKjb6_5iqLCfiVvALkf67C8S18z8BDjpB4E8kTkqOAqVNeXZTPqrjVjb8BDN6ewze5i7W4Ngz82AYxXjrRtomzAlGZFvHeykq7V7TBo7ScJBC8vR-w/w600/git-server-10.png)
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYDy2t0F_d13IAtf-_JAGYLXijFBCRUWKdYyLgx_-VU9g24skZ1HrYEe1MbRvWeKyIOupqLWSbIPy0j6JTba4LNoWzaYOx6dDL63ENsO4ZO1QDLPlVmkLn66lczsJTLhcuXwx9KGgehp4/w600/git-server-11.png)
再次測試,便沒有問題
Git 能進行版本控制,可以根據需要,返回某個版本的狀態
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqCVlaqqggPLnV8A8JeZMPCrrDU5gDqn2fsVqis1TMyZv2KT93qD6kOfrKqzj1eAJgFV93toC106wT6dYKmnUipWdjaNIJJejjPB4LVQpY4qE5K2-xDbcd4QpcK4OGWeMgJ1ym8_9BEBk/w600/git-server-12.png)
輸入
git log來查看 Repository 的 日誌資料
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIqt21QKhfK03LiXAwfXkr9XIANF6kDxVCexeDIBRDjY1PX0kZgJ4serPNt1vG28tZcvpqdEZmW2YUK-MqqqRo23GFHa2FDK8E45M1X7_W6-KgPnI72PP9QH7l49VXe4NOcRa1QztyAzY/w600/git-server-13.png)
從 git log 中查看需要返回版本的 Commit ID ,輸入
git reset --hard 'commit-id'便可以在不影響 Repository 的狀態下返回該版本
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlqkuAcTq6Zn7moOtvateycnkLj3O4n_zthx3p11loA_u8S6-7cU6KC5WlptuG21FtuDN3UTPdOLvLncmeT3Zftn7P9kshwSNUI5M57l_YjsEpSzi37bAocNDqkfQcqSmSsnKGZ9Hrpnw/w600/git-server-13a.png)
若需要重置成最新版本,輸入
git pull
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3GsMYTczyh1OolD2RcrSMu1827D87fXrddmT7NR2ShPlhBn-Qm1zSPILgidv-KgExhpsoWheq6HP12wzQnElVt6uxH33-M4DhUIknxRaI3ljmYN7raraNHzuJIGAvhs3UTm9crbD-CxY/w600/git-server-13b.png)
若想在返回某個提交狀態仍能繼續推送新的版本到 Repository ,輸入
git checkout 'commit-id' -- 'your-file'git checkout 能指定檔案,並返回指定提交版本
指定檔案亦可以使用 * (星號)
若果需要讓遠端連接至本機,需要安裝 OpenSSH伺服器 ,輸入
sudo apt-get install openssh-server
![見下文 見下文](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKbfPW1yt_dO3j9dhZYyw5N9gS643LNcs1wAU6IrXTga-o1qruR8XQgBYFl36TxHGnCDFEh1TC1hiZI1N6zWYOGGwOp0mIIsGN2JHySWlMw4TcLMFwAABaUYYUktl37FCiBfYLmVVm9FY/w600/git-server-14.png)
在遠端輸入
git clone <username>@<hostname>:<port><pathname>username 為該 Git Repository 的擁有者帳戶
hostname 為該遠端位置,可以是 IP 或 域名
port 為 SSH伺服器 的連接埠,若使用預設的 22連接埠 可以不需要填寫,連 : (冒號) 都可以不填寫
pathname 為該 Repository 於該遠端的目錄位置
若果是第一次連接到 OpenSSH伺服器 ,會詢問存取遠端位置
然後輸入該 帳戶的密碼 ,便可以從遠端複製 Repository 至本機
由於在下只是使用相同電腦,但以不同帳戶登入,因此使用 localhost 但操作上是相同
此文章只簡單介紹 Git 的基本功能
若需要學習 Git 可以到 git-scm.com 查看關於 Git 的詳細使用資料
在下發現使用本機建立 Git Repository 執行 git clone 使用 相對路徑
即使已經執行 git add 及 git commit ,當執行 git push 只會出現 Everything up-to-date ,不能推送資料
原來必須使用 絕對路徑 才能推送資料
沒有留言 :
張貼留言