一、簡介
什么是git?
git是一款開源的分布式版本控制工具
在世界上所有的分布式版本控制工具中,git是最快、最簡單、最流行的
git的起源
作者是Linux之父:Linus Benedict Torvalds
當初開發git僅僅是為了輔助Linux內核的開發(管理源代碼)
git的現狀
在國外已經非常普及,國內並未普及(在慢慢普及)
越來越多的開源項目已經轉移到git
二、SVN 和 Git 對比
速度
在很多情況下,git的速度遠遠比SVN快
結構
SVN是集中式管理,git是分布式管理
其他
SVN使用分支比較笨拙,git可以輕松擁有無限個分支
SVN必須聯網才能正常工作,git支持本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn,git只會在根目錄擁有一個.git
分布式和集中式的最大區別在於:在分布式下,開發者可以本地提交。每個開發者機器上都有一個服務器的數據庫
三、使用 Git
跟SVN一樣,你可以通過命令行敲指令或者圖形界面客戶端使用git
在Mac上,比較好用的git圖形界面客戶端有
SourceTree
GitHub
下載地址:
https://mac.github.com
不過它是專門為GitHub網站而設計的
Xcode
四、
git常用指令
git help :git指令幫助手冊
查看其他指令的做法:git help 其他指令
git config :git的配置信息相關(修改的是.git/config文件)
配置用戶名:git config “user.name” 用戶名(用於跟蹤修改記錄)
配置郵箱:git config “user.email” 郵箱(用於多人開發間的溝通)
查看配置信息:git config –l
編輯配置信息:git config –e(用vim編輯,:wq是退出vim編輯器)
設置指令的別名:git config alias.別名 原指令名稱
設置帶參數指令的別名:git config alias.別名 “原指令名稱 參數”
將此設置應用到整個系統中:git config ––gloabal
git status :查文件的狀態
查看某個文件的狀態:git status 文件名
查看當前路徑所有文件的狀態:git status
git log :查看文件的修改日志
查看某個文件的修改日志:git log 文件名
查看當前路徑所有文件的修改日志:git log
用一行的方式查看簡單的日志信息:git log ––pretty=oneline
查看最近的N次修改:git log –N(N是一個整數)
git diff :查看文件最新改動的地方
查看某個文件的最新改動的地方:git diff 文件名
查看當前路徑所有文件最新改動的地方:git diff
git init :初始化一個空的本地倉庫,生成一個.git目錄,用於維護版本信息
在當前路徑初始化倉庫:git init
在其他路徑初始化倉庫:git init 倉庫路徑
git add :將工作區的文件保存到暫緩區
保存某個文件到暫緩區:git add 文件名
保存當前路徑的所有文件到暫緩區:git add .(注意,最后是一個點 . )
git commit :將暫緩區的文件提交到當前分支
提交某個文件到分支:git commit -m ”注釋” 文件名
保存當前路徑的所有文件到分支:git commit -m ”注釋”
git reset :版本回退(建議加上––hard參數,git支持無限次后悔)
回退到上一個版本:git reset ––hard HEAD^
回退到上上一個版本:git reset ––hard HEAD^^
回退到上N個版本:git reset ––hard HEAD~N(N是一個整數)
回退到任意一個版本:git reset ––hard 版本號(版本號用7位即可)
git reflog :查看分支引用記錄(能夠查看所有的版本號)
git rm:刪除文件(刪完之后要進行commit操作,才能同步到版本庫)
git clone:下載遠程倉庫到本地
下載遠程倉庫到當前路徑:git clone 倉庫的URL
下載遠程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑
git pull:下載遠程倉庫的最新信息到本地倉庫
git push:將本地的倉庫信息推送到遠程倉庫
五、
工作原理
如果想了解git的工作原理,有幾個核心概念必須知道
工作區(Working Directory):倉庫文件夾里除.git目錄以外的內容
版本庫(Repository):.git目錄,用於存儲記錄版本信息
暫緩區(stage)
分支(master):git自動創建的第一個分支
HEAD指針:用於指向當前分支
git add和git commit的原理
git add :把文件修改添加到暫存區
git commit :把暫存區的所有內容提交到當前分支

六、
遠程倉庫
如果是多人團隊開發,最好還是搭建一個遠程倉庫
搭建遠程倉庫的途徑
自己搭建一個git服務器:費時費力
在GitHub上托管項目:公開項目免費、私有項目收費,很多第三方開源項目
在oschina上托管項目:完全免費,在國內訪問速度快(推薦使用)
七、
搭建GitHub遠程倉庫
注冊一個GitHub帳號:
https://github.com
打開“Account Settings”
1.
配置SSH Key
點擊“SSH keys”
配置Mac的SSH Key的公鑰(用於限制提交)

在Mac上生成SSH Key(在終端輸入下面指令)
cd ~/.ssh
ssh-keygen -t rsa -C "你的郵箱地址”
然后一直敲回車
然后就會在~/.ssh目錄下生成SSK Key的秘鑰對
id_rsa :私鑰,不可泄露
id_rsa.pub :公鑰,可以公開(將這個文件的內容粘貼到GitHub上)
利用cat指令可以查看文件的內容
cat id_rsa.pub
2.
添加倉庫

拷貝倉庫地址,用於下載到本地

如果想刪除倉庫,也很簡單

筆記
1 01. GIT簡介(PPT) 2 ================================================================================ 3 4 02. GIT命令行幫助 5 ================================================================================ 6 $ svn help 7 查看svn所有命令的幫助 8 $ svn help 子命令 9 10 # 要退出幫助信息,按"q" 11 # 翻看下頁,按"空格" 12 # 翻看上頁,按"CTRL+B" 13 # 要搜索相關文字,按"/"然后輸入"相關文字" 14 15 03. 創建代碼庫 & 配置個人信息 16 ================================================================================ 17 1> 創建代碼倉庫 18 $ git init 19 20 2> 配置用戶名和郵箱 21 $ git config user.name lnj 22 $ git config user.email lnj@gmail.com 23 24 * 以上兩個命令會將用戶信息保存在當前代碼倉庫中 25 26 # 只有配置了用戶和郵箱之后,git才能識別出操作的人員信息,通過鈎子(hooks)程序可以設置一些動作 27 # 例如單元測試發現問題后,自動給相關人員發送電子郵件 28 * 注意 暫時不建議投入一毛錢精力 29 30 3> 如果要一次性配置完成可以使用一下命令 31 $ git config --global user.name lnj 32 $ git config --global user.email lnj321@gmail.com 33 34 * 以上兩個命令會將用戶信息保存在用戶目錄下的 .gitconfig 文件中 35 36 4> 查看當前所有配置 37 $ git config -l 38 39 04. 實際開發 40 ================================================================================ 41 1> 創建代碼,開始開發 42 $ touch main.c 43 $ open main.c 44 45 2> 將代碼添加到代碼庫 46 # 查看當前代碼庫狀態 47 $ git status 48 # 將文件添加到代碼庫 49 $ git add main.c 50 # 將修改提交到代碼庫 51 $ git commit -m "添加了main.c" 52 53 提示: 54 * 在此一定要使用 -m 參數指定修改的備注信息 55 * 否則會進入 vim 編輯器,如果對vim不熟悉,會是很糟糕的事情 56 57 # 將當前文件夾下的所有新建或修改的文件一次性添加到代碼庫 58 $ git add . 59 60 3> 添加多個文件 61 $ touch Person.h Person.m 62 $ git add . 63 $ git commit -m "添加了Person類" 64 $ open Person.h 65 $ git add . 66 $ git commit -m "增加Person類屬性" 67 68 * 注意 使用git時,每一次修改都需要添加再提交,這一點是與svn不一樣的 69 70 git 的重要概念及工作原理 71 -------------------------------------------------------------------------------- 72 工作區 73 暫存區(staged) 74 分支(HEAD) 75 76 05. 別名 & 日志 77 ================================================================================ 78 $ git config alias.st status 79 $ git config alias.ci "commit -m" 80 81 個人建議:除非特殊原因,最好不要設置別名,否則換一台機器就不會用了 82 83 # 查看所有版本庫日志 84 $ git log 85 # 查看指定文件的版本庫日志 86 $ git log 文件名 87 88 # 配置帶顏色的log別名 89 $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 90 91 提示:在git中,版本號是一個由SHA1生成的哈希值 92 93 06. 版本號,讓我們在任意版本之間穿梭 94 ================================================================================ 95 # 回到當前版本,放棄所有沒有提交的修改 96 $ git reset --hard HEAD 97 # 回到上一個版本 98 $ git reset --hard HEAD^ 99 # 回到之前第3個修訂版本 100 $ git reset --hard HEAD~(3) 101 # 回到指定版本號的版本 102 $ git reset e695b67 103 104 # 查看分支引用記錄 105 $ git reflog 106 107 07. 單個文件的修改管理 108 ================================================================================ 109 # 查看文件變化 110 $ git diff 111 # 撤銷對文件做的修改 112 $ git checkout Person.h 113 # 從代碼庫(暫存區中刪除文件)
1 01. 建立代碼倉庫(專門用於團隊開發的代碼倉庫) 2 ================================================================================ 3 4 # 切換目錄 5 $ cd /Users/lnj/Desktop/git演練/公司/weibo 6 # 建立空白代碼庫(專門用於團隊開發) 7 $ git init --bare 8 9 02. 項目經理准備項目(前奏) 10 ================================================================================ 11 12 # 切換目錄 13 $ cd /Users/lnj/Desktop/git演練/經理 14 # "克隆"代碼庫到本地 15 $ git clone /Users/lnj/Desktop/git演練/公司/weibo/ 16 17 # 個人信息配置(因為要演示一台機器上的多人協作,日常開發可以忽略) 18 $ git config user.name manager 19 $ git config user.email manager@163.com 20 21 .gitignore 22 -------------------------------------------------------------------------------- 23 .gitignore可以指定哪些文件不納入版本庫的管理 24 25 參考網址:https://github.com/github/gitignore 26 27 # 命令行中進入與.git同級的目錄 28 $ cd /Users/lnj/Desktop/git演練/經理/weibo 29 30 將以下命令一次性粘貼到命令行中 31 -------------------------------------------------------------------------------- 32 echo -e "# Xcode 33 # 34 build/ 35 *.pbxuser 36 *.mode1v3 37 *.mode2v3 38 *.perspectivev3 39 xcuserdata 40 *.xccheckout 41 *.moved-aside 42 DerivedData 43 *.hmap 44 *.ipa 45 *.xcuserstate 46 # CocoaPods 47 # 48 # We recommend against adding the Pods directory to your .gitignore. However 49 # you should judge for yourself, the pros and cons are mentioned at: 50 # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 51 # 52 # Pods/" > .gitignore 53 -------------------------------------------------------------------------------- 54 # 將.gitignore添加到代碼庫 55 $ git add .gitignore 56 57 03. 創建項目 58 ================================================================================ 59 提交同時"push"到遠程代碼倉庫 60 61 04. 新人加入 62 ================================================================================ 63 64 ... 65 66 05. 分布式的代碼庫 - 僅供參考 67 ================================================================================ 68 由於git是分布式的,任何一台計算機上都保留有完整的代碼庫的內容,因此可以把團隊開發的代碼庫放在任何位置 69 70 71 多個遠程代碼庫之間的同步演練"提示,此演練僅供了解,具體的使用,需要一定的團隊規模之后,才能夠體會" 72 73 74 06. 分支管理 - Tag 75 ================================================================================ 76 # 查看當前標簽 77 $ git tag 78 # 在本地代碼庫給項目打上一個標簽 79 $ git tag -a v1.0 -m 'Version 1.0' 80 # 將標簽添推送到遠程代碼庫中 81 $ git push origin v1.0 82 83 # 使用tag,就能夠將項目快速切換到某一個中間狀態,例如產品開發線上的某一個穩定版本 84 # 簽出v1.0標簽 85 $ git checkout v1.0 86 # 從簽出狀態創建v1.0bugfix分支 87 $ git checkout -b bugfix1.0 88 89 # 查看遠程分支 90 $ git branch -r 91 # 刪除遠程分支 92 $ git branch -r -d origin/bugfix1.0
1 01. 分布式的代碼庫 - 僅供參考 2 ================================================================================ 3 由於git是分布式的,任何一台計算機上都保留有完整的代碼庫的內容,因此可以把團隊開發的代碼庫放在任何位置 4 5 6 多個遠程代碼庫之間的同步演練"提示,此演練僅供了解,具體的使用,需要一定的團隊規模之后,才能夠體會" 7 8 9 02. 分支管理 - Tag 10 ================================================================================ 11 # 查看當前標簽 12 $ git tag 13 # 在本地代碼庫給項目打上一個標簽 14 $ git tag -a v1.0 -m 'Version 1.0' 15 # 將標簽添推送到遠程代碼庫中 16 $ git push origin v1.0 17 18 # 使用tag,就能夠將項目快速切換到某一個中間狀態,例如產品開發線上的某一個穩定版本 19 # 簽出v1.0標簽 20 $ git checkout v1.0 21 # 從簽出狀態創建v1.0bugfix分支 22 $ git checkout -b bugfix1.0 23 24 # 查看遠程分支 25 $ git branch -r 26 # 刪除遠程分支 27 $ git branch -r -d origin/bugfix1.0
1 如何使用/學習第三方框架? 2 3 優秀的第三方框架都在 github.com 4 5 1> 搜索 6 2> git clone 獲得完整版本 7 $ git clone https://github.com/AFNetworking/AFNetworking.git 8 3> 獲取最新版本 git pull 9 * 進入clone的本地文件夾 10 $ git pull 11 12 4> 看github上的文檔,優秀的第三方框架都有好的文檔 13 5> 編寫測試程序,看運行結果 14 6> 針對感興趣的部分,看源代碼 15 16 7> 有問題去http://stackoverflow.com