git超詳細教程


GitHub操作總結 : 總結看不明白就看下面的詳細講解.


GitHub操作流程 :


第一次提交 :  

方案一 : 本地創建項目根目錄, 然后與遠程GitHub關聯, 之后的操作一樣;

-- 初始化Git倉庫 :Git init ;

-- 提交改變到緩存 :git commit -m 'description' ;

-- 本地git倉庫關聯GitHub倉庫 : git remote add origin git@github.com:han1202012/TabHost_Test.git ;

-- 提交到GitHub中 : git push -u origin master ;

方案二 方案二就是不用關聯GitHub倉庫, 直接從GitHub沖克隆源碼到本地, 項目根目錄也不用創建;

-- 從GitHub上克隆項目到本地 :git clone git@github.com:han1202012/NDKHelloworld.git , 注意克隆的時候直接在倉庫根目錄即可, 不用再創建項目根目錄 ;

-- 添加文件 :git add ./* , 將目錄中所有文件添加;

-- 提交緩存 :git commit -m '提交';

-- 提交到遠程GitHub倉庫 : git push -u origin master ;

之后修改提交 : 

-- 與GitHub遠程倉庫同步 :git pull ;

-- 查看文件變更 : git status ;

-- 提交代碼到本地緩存 : git commit -m 'description';

--提交代碼到遠程GitHub倉庫 :git push ;


.gitignore用法 : 開放模式 注明忽略的文件 直接列出文件名, 保守模式 注明保留的文件 !文件名 ;


Git標簽操作 : 輕量級標簽, 帶注釋標簽;

--查看標簽 :git tag ;

--添加標簽 : 輕量級標簽git tag -a tagName -m 'description' ;

--刪除標簽 :git tag -d tagName ;

--提交標簽到GitHub中 : git push origin --tags ;


Git分支操作: 創建分支后, 分支操作不會影響master分支, 但是master分支改變會影其它分支;

--列出分支 :git branch ;

--切換分支 :git checkout master ;

--提交分支 : git push origin branchName ;

--刪除分支 : git branch -D branchName ;

--合並分支 : git merge branchName ;


.

一. Git介紹


分布式 : Git版本控制系統是一個分布式的系統, 是用來保存工程源代碼歷史狀態的命令行工具;


保存點 : Git的保存點可以追蹤源碼中的文件, 並能得到某一個時間點上的整個工程項目額狀態; 可以在該保存點將多人提交的源碼合並, 也可以會退到某一個保存點上;


Git離線操作性 :Git可以離線進行代碼提交, 因此它稱得上是完全的分布式處理, Git所有的操作不需要在線進行; 這意味着Git的速度要比SVN等工具快得多,  因為SVN等工具需要在線時才能操作, 如果網絡環境不好, 提交代碼會變得非常緩慢; 


Git基於快照 : SVN等老式版本控制工具是將提交點保存成補丁文件, Git提交是將提交點指向提交時的項目快照, 提交的東西包含一些元數據(作者, 日期, GPG等);


Git的分支和合並 : 分支模型是Git最顯著的特點, 因為這改變了開發者的開發模式, SVN等版本控制工具將每個分支都要放在不同的目錄中, Git可以在同一個目錄中切換不同的分支;

分支即時性 : 創建和切換分支幾乎是同時進行的, 用戶可以上傳一部分分支, 另外一部分分支可以隱藏在本地, 不必將所有的分支都上傳到GitHub中去;

分支靈活性 : 用戶可以隨時 創建 合並 刪除分支, 多人實現不同的功能, 可以創建多個分支進行開發, 之后進行分支合並, 這種方式使開發變得快速, 簡單, 安全;


二. Git通用客戶端(msysgit)


1. 下載Git客戶端


Git客戶端下載地址 :https://code.google.com/p/msysgit/downloads/list 將地址復制到瀏覽器欄即可下載.


2. 安裝Git客戶端


歡迎界面 : 直接下一步;



協議 : 必須接受;



安裝位置 : 預留100M空間, 自定義安裝位置;



選擇安裝組件 :也可以默認選擇;

-- 圖標組件(Addition icons) : 選擇是否創建快速啟動欄圖標 或者 是否創建桌面快捷方式;

-- 桌面瀏覽(Windows Explorer integration) : 瀏覽源碼的方法, 單獨的上下文瀏覽 只使用bash 或者 只用Git GUI工具; 高級的上下文瀏覽方法 使用git-cheetah plugin插件;

-- 關聯配置文件 : 是否關聯git配置文件, 該配置文件主要顯示文本編輯器的樣式;

-- 關聯shell腳本文件 : 是否關聯Bash命令行執行的腳本文件;

-- 使用TrueType編碼 : 在命令行中是否使用TruthType編碼, 該編碼是微軟和蘋果公司制定的通用編碼; 



開始菜單快捷方式目錄 : 設置開始菜單中快捷方式的目錄名稱, 也可以選擇不再開始菜單中創建快捷方式;



設置環境變量 : 選擇使用什么樣的命令行工具, 一般情況下我們默認使用Git Bash即可, 默認選擇;

-- Git自帶 : 使用Git自帶的Git Bash命令行工具;

-- 系統自帶CMD : 使用Windows系統的命令行工具;

-- 二者都有 : 上面二者同時配置, 但是注意, 這樣會將windows中的find.exe 和 sort.exe工具覆蓋, 如果不懂這些盡量不要選擇; 



選擇換行格式 : 

-- 檢查出windows格式轉換為unix格式 : 將windows格式的換行轉為unix格式的換行在進行提交;

-- 檢查出原來格式轉為unix格式 : 不管什么格式的, 一律轉為unix格式的換行在進行提交;

-- 不進行格式轉換 : 不進行轉換, 檢查出什么, 就提交什么;



開始安裝 : 



安裝結束 : over;



3. 配置GitHub


修改Git Bash的配置 : 將Git Bash設置為快速編輯模式, 可以更好的使用該命令行工具 : 



(1) 創建本地ssh


使用命令 : 創建本地ssh

 

copy
 
 
ssh-keygen -t rsa -C "13241153187@163.com"  

GitHub郵箱 : 該命令后面的郵箱就是GitHub的注冊郵箱

 

路徑選擇 : 使用該命令之后, 會出現提示選擇ssh-key生成路徑, 這里直接點回車默認即可, 生成的ssh-key在默認路徑中;

密碼確認 : 這里我們不使用密碼進行登錄, 用密碼太麻煩;



(2) 將ssh配置到GitHub中


進入生成的ssh目錄 : C:\Documents and Settings\Administrator\.ssh 中, 使用記事本打開 id_rsa.pub 文件, 將該文件中的內容復制;

id_rsa.pub 文件內容 : 

 

copy
 
 

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtT1YCeaNulpfC+ARqAWrCdfpi6CpW3gkGT0hp6Q8by7NnEfy4dah9CwSrNbWJH5eS4tiqckE+bdbSVNvAboFD1MtGZjtzE4GDweG/6J/SDYV/ADFN/RLWGb+5rQ8wMCjc/fODgLJDFxk1Fwk/TTqTcbtLab1toLcts3zGIW5DstA3RQ0CCX/sPew5m7vh7DcKXluj2TBd9hw== 13241153187@163.com  
進入GitHub網站 : 登錄GitHub, 選擇Account Setting 用戶設置 : 

 



選擇左側的SSH-KEY選項 : 



點擊右側的Add SSH key :

 


將上面復制好的ssh-key復制進去 : 



驗證是否配置成功 : 

使用命令 : 

copy
 
 

ssh -T git@github.com  

 

成功提示 : 如果出現Hi han1202012! You've successfully authenticated, but GitHub does not provide shell access. 就說明配置成功, 可以連接上GitHub;



(3) 配置本地用戶和郵箱


用戶名郵箱作用 : 我們需要設置一個用戶名 和 郵箱, 這是用來上傳本地倉庫到GitHub中, 在GitHub中顯示代碼上傳者;

使用命令 : 

 

copy
 
 

git config --global user.name    

  • git config --global user.email     



 


4. Git Bash提交源碼到GitHub


(1) GitHub中創建一個工程


工程的https地址: https://github.com/han1202012/TabHost_Test.git .

工程的SSH地址 : git@github.com:han1202012/TabHost_Test.git .


GitHub提示生成的命令 : 

-- Create a new repository on the command line : 

 

copy
 
 

touch README.md  

  • git init  
  • git push -u origin master  


-- Push an existing repository from the command line : 

 

 

copy
 
 

git remote add origin git@github.com:han1202012/TabHost_Test.git  

  • git push -u origin master  



 

(2) 初始化git目錄


使用命令 : 

 

copy
 
 

git init  
如果不執行這條命令, 就會出現錯誤 : fatal: Not a git repository (or any of the parent directories): .git .

 


(3) 添加文件


使用命令 : 

 

copy
 
 

git add ./*  

 


可能會報出一些警告, 不用理會 : 

 

copy
 
 

warning: LF will be replaced by CRLF in AndroidManifest.xml.  

  • The file will have its original line endings in your working directory.  
  • warning: LF will be replaced by CRLF in gen/shuliang/han/tabhost_test/BuildConfig.java.  


將倉庫中的所有文件添加到緩存中;

 


(4) 提交緩存


使用命令 : 

 

copy
 
 

git remote add origin git@github.com:han1202012/TabHost_Test.git  
將添加或者改變的內容提交到緩存中;

 


(5) 將Git本地緩存提交到GitHub中


使用命令 : 

 

copy
 
 

git push -u origin master  

執行該命令, 源碼就被提交到了GitHub 中;


 

.

萬境絕塵 

http://blog.csdn.net/shulianghan/article/details/18812279

.


三. Git的一些用法


1. .gitignore文件


屏蔽文件 : .gitignore文件是告訴Git哪些目錄或者文件需要忽略, 這些文件將不被提交; 

常用場景 : 寫完代碼后會執行變異調試等操作, 使用 .gitignore 文件將這些編譯后的文件屏蔽, 這些文件不需要Git工具進行管理;

Android中的.gitignore : 在Android中 bin 和 gen 兩個目錄可以忽略;

.gitignore位置 : 項目根目錄下;


過濾模式 : Git中的 .gitignore 中有兩種模式,開放模式 和保守模式,保守模式的優先級要高於開放模式;


開放模式 : 設置哪些文件 活 目錄 被過濾, 凡是在文件中列出的文件或者目錄都要被過濾掉;

-- 過濾目錄 : /bin/ 就是將bin目錄過濾, 該文件下的所有目錄和文件都不被提交;

-- 過濾某個類型文件 : *.zip *.class 就是過濾zip 和 class 后綴的文件, 這些文件不被提交;

-- 過濾指定文件 : /gen/R.Java, 過濾該文件, 該文件不被提交;


保守模式 : 設置哪些文件不被過濾, 凡是列在其中的文件都要完整的提交上去;

-- 跟蹤目錄 : !/src , 該目錄下的所有文件都要被提交;

-- 跟蹤某類文件 : !*.Java , 凡是java文件都要保留;

-- 跟蹤指定文件 : !/AndroidManifest.xml , 該文件需要保留, 提交上去;


配置原則 : 一般情況下采用開放模式魚保守模式共同使用;

eg : 一個目錄下有很多目錄和文件, 當我們只需要保留其中的一個文件的時候, 先用開放模式不保留這些文件, 然后用保守模式將這個文件留下來, 保守模式的優先級要高於開放模式;


2. 標簽使用(Tag)


標簽作用: 在開發的一些關鍵時期,使用標簽來記錄這些關鍵時刻, 例如發布版本, 有重大修改, 升級的時候, 會使用標簽記錄這些時刻, 來永久標記項目中的關鍵歷史時刻;


查看標簽: 列出的標簽安裝ASCII字母順序確定, 排序沒有很明確的意義;

-- 列出所有的標簽 :  

 

copy
 
 

git tag   -- 使用限定列出限定后的標簽 : 

 

 

copy
 
 

git tag -l v1.*  


 

標簽分類 : Git中的標簽分為 輕量級標簽(lightweight) 和 帶注釋的標簽(annotated), 一般情況下推薦使用帶注釋的標簽, 如果標簽是臨時的可以采用輕量級標簽;

-- 輕量級標簽 : 輕量級標簽中的信息含量很少, 這種標簽只代表某時刻代碼的提交, 相當於指向這個提交的指針;

-- 帶注釋標簽 : 這種標簽是一種校驗和, 包含標簽名, 郵箱, 日期, 標簽信息, GPG簽名 和 驗證, 它相當於一個對象, 封裝了這些信息;


創建標簽 :

-- 創建輕量級標簽 : 這樣的標簽沒有附帶其它的信息;

 

copy
 
 

git tag v2.0  

 


-- 創建帶注釋標簽 : -m 后跟的是注釋信息, 當使用git show v2.1的時候, 會顯示這個注釋信息;

 

copy
 
 

git tag -a v2.1 -m 'first version'  
-- 創建GPG私鑰的注釋標簽 : 

 

 

copy
 
 

git tag -s v2.1 -m 'GPG version'  

 

在本機上實驗不成功 出現下面的錯誤 : 

 

copy
 
 

Administrator@XRDPTJ9ILK6IWRA /storage/TabHost_Test (master)  

  • $ git tag -s v2.2 -m 'GPG version'  
  • error: unable to sign the tag  

以后再找原因;

 

-- 為之前的提交添加標簽 : 先使用 git log --oneline 命令列出之前的提交, 會有一個七位的十六進制數進行標記, 使用git tag -a v3.1 f1bb97a 命令即可為這個提交添加標簽;

 

copy
 
 

$ git log --oneline  

  •   
  • git tag -a v3.1 f1bb97a  



 

刪除標簽 : 使用命令 git tag -d 標簽名 命令刪除標簽;

 

copy
 
 

git tag -d v0.1  


 

驗證標簽 : 提交了GPG帶注釋標簽才可以驗證, 因為上面沒有提交成功, 這里留下一個命令;

 

copy
 
 

git tag -v v1.0  

 

共享標簽 : 即將標簽提交到GitHub中;

 

copy
 
 

git push origin --tags  

 


3. 分支和合並


(1) 查看現存分支


查看現存分支 : git branch命令;

 

copy
 
 

git branch  
從結果可以看出, 現在只有一個分支master;

 


(2) 創建分支


創建分支 : git branch 分之名稱, 就可以創建一個分支, 創建完分支以后可以查看分支, 當前使用的分支會顯示成為綠色, 前面帶有 "*", 如果不是當前使用的分支, 顯示的是白色, 並且沒有 "*" 前綴;

 

copy
 
 

git branch branch1  

 

(3) 切換分支


切換分支 : git checkout 分支名稱, 切換分支以后, 在分支進行操作,文件的改變不會體現在master主分支中, 主分支改變, 會體現在其它分支中;

 

copy
 
 

git checkout branch1  

 

關於主分支和其它分支 : 

-- 分支編輯 : 現有兩個分支 master 主分支, 和剛創建的branch1 分支, 切換到 branch1 分支, 在branch1 中創建一個文件 description_branch1.txt; 

-- 其它分支文件不會影響主分支 : 然后在切換回 master 主分支, 發現沒有description_branch1.txt文件, 創建一個文件 description_master.txt;

-- 主分支會影響其它分支 : 在切換回 branch1 分支中, 發現存在 description_master.txt文件;

.

對比過程 : 


查看該工程項目分支情況 : 

 

copy
 
 

git branch  

 

-- 分支結果 : 

 

copy
 
 

branch1  

  • master  

 


切換到 branch1 分支 : 

 

copy
 
 

git checkout branch1   -- 切換結果 : 

 

 

copy
 
 

Switched to branch 'branch1'  

 


查看 branch1 分支下的文件 : 

 

copy
 
 

ls   -- 查看文件結果 : 

 

 

copy
 
 

AndroidManifest.xml  ic_launcher-web.png   res  

  • assets               libs                  src  
  • gen                  project.properties  


創建一個文件 : 

 

 

copy
 
 

touch description_branch1.txt  
添加這個文件到本地緩存 :

 

 

copy
 
 

git add description_branch1.txt  
提交本地緩存 : 注意, 這里必須提交, 如果不提交緩存, 這個文件在主分支也會出現;

 

 

copy
 
 

git commit -m 'add a description of branch1'   -- 提交結果結果 : 

 

 

copy
 
 

[branch1 7f5785e] add a description of branch1  

  •  1 file changed, 0 insertions(+), 0 deletions(-)  
  •  create mode 100644 description_branch1.txt  


查看該分支下的文件 : 

 

 

copy
 
 

ls   -- 查看文件結果 : 

 

 

copy
 
 

AndroidManifest.xml      libs  

  • assets                   proguard-project.txt  
  • ic_launcher-web.png  


切換回主分支 : 

 

 

copy
 
 

git checkout master  

 

-- 切換分支結果 : 

 

copy
 
 

Switched to branch 'master'  

  • Your branch is up-to-date with 'origin/master'.  

 


查看主分支文件 : 

 

copy
 
 

ls   -- 查看文件結果 : 沒有在 branch1 中添加的文件;

 

 

copy
 
 

AndroidManifest.xml  ic_launcher-web.png   res  

  • assets               libs                  src  
  • gen                  project.properties  



.

 


(4) 提交分支 


提交分支命令 : 將本地的分支提交到 GitHub中;

 

copy
 
 

git push origin experiment  

 

(5) 分支合並移除


合並分支命令 : 合並分支之后, 分支中有的文件在 主分支中也會顯示, 相當於將branch1 分支中的文件拷貝了一份到master分支中;

 

copy
 
 

git merge branch1   合並結果 : 

 

 

copy
 
 

Updating f1bb97a..7f5785e  

  • Fast-forward  
  •  create mode 100644 description_branch1.txt  

 




.

(6) 刪除分支


刪除分支命令 : 

 

copy
 
 

git branch -d branch1  
強制刪除分支命令 : 如果branch1 分支還沒有被合並的話, Git是不允許刪除這個分支的, 此時要想刪除該分支, 就只能使用下面的命令強制刪除該分支 : 

 

 

copy
 
 

git branch -D branch1  

 

4. Git工作流程


(1) 兩種工作流程


協作開發工作流程 : 這種情況是最復雜的情況, 多人團隊共同開發一個項目;

-- 與遠程倉庫同步 : git pull ;

-- 修改文件 : 添加 刪除 修改文件;

-- 查看變更 : git status ;

-- 載入變更 :添加文件, 先使用git add fileName, 在使用 git commit -m 'note' 載入變更; 如果是刪除 修改文件, 直接使用 git commit -m 'note' 提交;

-- 重復 : 重復執行 修改文件 查看變更 載入變更 提交載入動作;

-- 上傳 : 使用 git push 命令將項目源碼提交帶GitHub中去;


單獨開發工作流程 : 如果是個人獨立開發, 僅追蹤本地文件變更, 就不需要提交到服務器上, 因為Git是分布式的;

-- 修改文件 : 

-- 提交變更 : 

-- 重復 : 


(2) 簡單示例


1> 獨立開發示例


該示例不會上傳, 僅在本地進行操作;


從GitHub中檢出項目源碼 : 注意, 檢出的源碼是根目錄源碼, 我們在總倉庫的根目錄檢出即可,不同再為項目創建目錄;

 

copy
 
 

git clone git@github.com:han1202012/AndroidPictureViewer.git   -- 檢出克隆結果 : 

 

 

copy
 
 

Cloning into 'AndroidPictureViewer'...  

  • remote: Counting objects: 86, done.  
  • Checking connectivity... done.  


刪除bin和gen目錄 : 這兩個目錄是Android工程編譯產生的臨時文件, 沒有必要上傳到GitHub中去;

 

 

copy
 
 

rm -rf bin gen   -- 查看刪除結果狀態 : 

 

 

copy
 
 

git status   -- 結果 : 

 

 

copy
 
 

On branch master  

  • Your branch is up-to-date with 'origin/master'.  
  •   (use "git checkout -- <file>..." to discard changes in working directory)  
  •         deleted:    gen/shuliang/han/imageview_test/R.java  

 


提交緩存 : 

 

copy
 
 

git commit -a   -- 提交結果 : 

 

 

copy
 
 

[master e4377ba] delete bin and gen directory.  

  •  28 files changed, 2 insertions(+), 110 deletions(-)  
  •  delete mode 100644 gen/shuliang/han/imageview_test/R.java  


2> 協作開發示例


與遠程倉庫同步 : 

copy
 
 

git pull  

-- 如果其他人沒有提交項目到GitHub上, 就會出現下面結果 : 

 

copy
 
 

Already up-to-date.  
修改文件后查看變更 : 

 

 

copy
 
 

git status   -- 如果沒有變更會出現下面情況 : 

 

 

copy
 
 

On branch master  

  • Your branch is ahead of 'origin/master' by 1 commit.  
  •   
  • nothing to commit, working directory clean  


載入變更 : 如果有變更, 那么使用命令載入變更. 使用 git commit -a 或者 git add 命令;

 

-- 添加文件 : 先使用 git add 文件名 來添加文件到緩存, 之后使用 git commit -m '' 命令提交代碼到本地緩存;

-- 刪除改變文件 : 直接使用 git commit -m '', 提交刪除 或則 改變 到本地緩存;


提交項目源碼到服務器 : 

 

copy
 
 

git push   -- 提交源碼結果 : 

 

 

copy
 
 

warning: push.default is unset; its implicit value is changing in  

  • Git 2.0 from 'matching' to 'simple'. To squelch this message  
  •    1ddf8c7..e4377ba  master -> master  



 

查看GitHub中的源碼情況 : gen 和 bin 目錄果然被刪除了;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM