我是通過這個來學習的。個人愚笨,琢磨了半天,終於搞通了,醉了醉了,以前一直使用svn,用git確實有點水土不服。本文以如何使用git為主來展開,不涉及太多理論。
git是分布式的版本管理。什么叫分布式呢,這個得和SVN集中式對比一下。
SVN就是把所有的版本信息都管理在一個服務器上,其他端都是客戶端,checkout是獲取某個版本的代碼(通常是最新版本啦,也就是HEAD),update就是把本地的代碼更新一下,和服務器保持同步,commit就是把本地代碼提交給服務器。這些操作就如同訪問一個論壇,看帖,留言一樣。
而GIT是每一個機器上都有一個服務端,或許說服務端不太准確,應該說每一個機器上都是一個版本庫,SVN除了服務器之外,其他的機器上都只是一份代碼而已,並沒有版本信息,也就是說:如果你使用SVN,有一天服務器被人偷走了,你的機器上,只保留着昨天晚上update的最新代碼,你基本上無法看到以往版本的信息了,你新買個服務器,建個SVN服務器,版本號又得從1開始。而GIT不一樣,即使有一天github.com這個網站倒閉了,也沒有關系,你昨晚拉取(pull)到本地的數據是完整的一個版本庫,你在本機就可以查看到所有的版本信息,咱有空再建一個github2.com就是了。
以上是GIT與SVN一個比較大的區別。
明白了這一點就好辦了,接下來講如何使用git。
1.安裝與初始化
我喜歡使用命令行來操作。
在Windows下,登陸http://msysgit.github.io/index.html下載客戶端,安裝后有一個git bash的客戶端,雙擊打開如下圖所示:
在Mac下,在此下載客戶端http://git-scm.com/download/mac,安裝后直接使用自帶的終端即可操作。
接下來要進行一個簡單的初始化配置,在終端中輸入
git config --global user.email [your_email_address]
git config --global user.name [your_name]
這兩行的作用是對當前你使用的機器做一個標記,因為你的項目會被多個機器操作,而這有可能是你在使用,也有可能是別人在使用,那么是誰提交的代碼,就需要有一個標記,比如,我有一個版本庫,使用了我自己的三台電腦進行過提交,我使用git log命令來查看日志記錄,會顯示哪個用戶做了什么操作。
做好以上的配置,就可以繼續了。如果上面的配置不做,當你提交代碼的時候應該會提示你。
2.你要單機使用還是用github.com?
git是一個系統,github是一個使用git來管理版本庫的網站,這兩者還是有區別的。
如果你要單機使用的話,也就是你把自己的電腦當做版本庫,那么你需要使用git init命令。該命令會把當前目錄變成一個版本庫,並在里面生成一個.git文件夾。如下圖所示:
如果你要聯網使用,也就是說github.com上已經有一個版本庫了,我們把它克隆(clone)到本地,你可以理解為checkout。這時,你需要使用git clone [url]命令。該命令執行后,會在當前目錄創建一個以版本庫名命名的文件夾,這個文件夾里面有.git文件夾和項目相關的文件。
(1)先在github.com上創建一個新(空)的版本庫。
(2)創建完成后,會給出一個版本庫的地址
(3)在命令行中進入你想要把項目放置的位置,比如你想要把項目放置到/my_projects/目錄中,你只需要到這個目錄即可,不需要新建test_git目錄。然后在命令行中輸入:
git clone https://github.com/KrossFord/test_git.git
(4)然后你就可以在你的目錄中看到test_git目錄。
(5)該目錄中可以看到一個.git文件夾。
這樣,你就把其他機器(github.com)服務器上的版本庫給clone到本地了。
3.向版本庫提交代碼(commit)
新建的版本庫空空如也什么都沒有,我們以一個已經存在的Android項目為例,想其中添加代碼。
(1)新建一個Android項目(你自己的其他什么項目都可以啦),把代碼全部復制到test_git目錄中。如下圖所示:
(2)這個時候我們可以使用命令git status來查看版本庫的狀態,這里注意一點!git status命令查看的當前版本庫的狀態,何為當前呢?就是說,終端也就是命令行進入到一個有.git文件夾的文件夾里,那么git status命令就可以檢查這個目錄(項目)的狀態,如果你在一個沒有.git文件夾的文件夾中git status是沒有用的,因為那個文件夾並不是一個版本庫。
於是你可以看到如下內容:
一下文件是未被添加到版本庫中,我們需要使用git add命令來添加。
(3)忽略,對於一些項目有一些文件是不想被添加到版本庫上傳到服務器的,比如bin文件夾,這種情況我們可以建立一個.gitignore文件來處理,這里windows有點坑,它不能創建一個沒有文件名只有擴展名的文件。
沒關系,我們隨便建立一個文件,然后用命令行來改,使用
mv [原文件名] .gitignore
就行了。
在.gitignore文件中輸入以下內容即可:
#忽略bin文件夾本身 /bin #忽略bin文件夾內部的內容 /bin/
關於忽略規則,請參考這里。
這個時候再次輸入git status來看看版本庫的狀態。
這個時候就沒有bin文件夾了。
(4)添加文件,並提交文件。
直接使用git add .來進行添加,再次用git status查看狀態。
然后使用git commit -m "message"來提交,填寫提交信息是必須的。
這個時候,提交工作已經完成了,也就是說,版本庫中已經有了新加入的文件,但是如果此時你去刷新github.com的頁面,你會發現你的項目並沒有變化,依然是空的。這是因為git是分布式的,你本機的版本庫是版本庫A,github.com上的版本庫是版本庫B,它們是不會自動關聯同步的。
於是你需要最后一步操作。
(5)將數據推送到遠程版本庫,你需要使用git push origin master命令。
origin是遠程版本庫的名字,master是你當前分支的名字,具體詳情請參考這里。
對了,這個命令后,你需要輸入github賬號與密碼。
提交完后,你刷新github.com的頁面,就可以看到你的項目文件了。
4.更新本地版本庫數據
和svn一樣,如果遠程的版本庫先被修改了,那么我本地的版本庫想要保持最新,就需要對本地版本庫進行更新,這有點像svn中的update,但區別是svn中update只獲取最新的代碼,或者某一個特定版本的代碼,而git中的update是把整個版本庫與服務器端的同步。
具體操作,請執行git pull
以上,就是git的常規使用。
總結:
git init將當前目錄創建為版本庫,實際上就是在當前目錄里面創建了一個.git文件夾。
git clone [url]將服務器端的版本庫clone一個到本地來,會在當前文件夾下創建一個項目文件夾,項目文件夾中有.git文件夾。
git config --global user.email xxx
git config --global user.name xxx
以上兩個命令用來設置當前機器使用git的用戶信息。
git log可以查看當前版本庫的日志信息,在沒有.git文件夾的文件夾中無效。
使用.gitignore來忽略一些不想提交的文件。
使用git add [file]來把文件納入版本庫中,此時文件還沒有提交到版本庫。
git commit -m "this is a message"來進行提交,git的提交是本地操作的,可以說所有的操作都是本地的
git status來查看版本庫的狀態,隨時都可以使用,在沒有.git文件夾的文件夾中無效。
git push origin master將本地版本庫的信息推送到服務器端。
git pull將服務器端的版本庫信息同步到本地。
以上操作,基本可以滿足個人需求了。
最后再補充一點:代理
如果你使用公司的網絡來訪問github的話,往往會收到一些限制,給git設置代理的方法:
git config --global http.proxy [host:port]
更新2014-11-4 19:11:37
git commit -a命令,-a 的作用是將被修改的,或者被刪除的文件加入到待提交列表,commit的時候會被commit。但是新增的文件不會,也就是說,新增的文件還是要用git add命令來操作。
git add . 可以一次性add所有的新文件。
更新2015-3-20 11:50:43
git bash進入后目錄總是是不在我自定義的目錄上,更改git bash的初始目錄(起始目錄,開始目錄)的辦法是:
windows下右鍵git bash的圖標,在“快捷方式”選項卡中,有“起始位置”一欄,更改即可。
更新2015-3-23 15:07:20
本地創建的倉庫推送到github上的使用辦法。
要做畢業設計,因此我的項目都放在www目錄下,以前我的android項目都是放在我自己管理的一個mygit目錄下的,eclipse直接引用就行了,但網站不行(其實也可以,服務器配置改下就行了),所以我的項目目錄就存放在www目錄下,我首先進入我的項目目錄www/flower(一個鮮花網站……),然后在git bash中輸入git init命令,即可將當前目錄變成一個倉庫,可以看到該目錄中自動生成了一個隱藏文件夾.git。
接下來我們就要推送到github上,在github上建立一個倉庫,然后會給你一個地址。
這個時候需要用git bash工具,給當前的倉庫加一個遠端地址。命令如下:
git remote add remote_name https://github.com/xxxxxx/xxxxxx.git
remote_name可以自己隨便起
后面跟着的地址,就是github給你的倉庫地址。
添加完畢之后,輸入git remote -v可以查看到remote是否添加上了。
接下來就是關鍵性的一步
git push remote_name master
這樣就可以將本地的代碼推送到github了。
直到學習了這一步,我才知道git push remote_name local_name
remote_name是github上的名字,
local_name是本地的名字。
之前的用法都是git push origin master,也就意味着,origin是github上的,master是本地的,這個參數的順序還真是符合英語的語法順序呢……