產品協同設計第三組

ssh金鑰 << Previous Next >> V-rep

git

Plumbing and Porcelain

Plumbing and Porcelain

Git Objects

Git Objects

cat -file 從Git 取回資料

update - ref更新引用

Git References

Git References

如何知道最後一次提交?:

執行 git branch

$ cat .git/HEAD


ref: refs/heads/master


執行 git checkout test

$ cat .git/HEAD

ref: refs/heads/test



手動編輯此文件,但同樣可以執行更安全的命令:



執行symbolic-ref

$ git symbolic-ref HEAD

refs/heads/master



設置HEAD:


$ git symbolic-ref HEAD refs/heads/test

$ cat .git/HEAD

ref: refs/heads/test



Packfiles

Packfiles
使用 git cat-file 命令查看這個文件大小

$ git cat-file -s 033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5
22044


使用git gc打包文件


$ git gc Counting objects: 18, done. Delta compression using up to 8 threads. Compressing objects: 100% (14/14), done. Writing objects: 100% (18/18), done. Total 18 (delta 3), reused 0 (delta 0)

The Refspec

The Refspec

.git / config文件中添加遠端origin的名稱,遠程存儲庫的URL以及用於獲取的refspec

[remote "origin"] url = https://github.com/schacon/simplegit-progit fetch = +refs/heads/:refs/remotes/origin/


如果想一次性執行某些操作,也可以在命令行中指定refspec

$ git fetch origin master:refs/remotes/origin/mymaster

指定多個refspec

$ git fetch origin master:refs/remotes/origin/mymaster \
	 topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
 ! [rejected]        master     -> origin/mymaster  (non fast forward)
 * [new branch]      topic      -> origin/topic

刪除
refspec
git push origin :topic

git push origin -- delete topic


Transfer Protocols

Transfer Protocols

Transfer Protocols--傳輸協議

Git可以透過兩種主要方式在兩個倉儲之間傳輸數據:“啞吧”協議與“智能”協議。本章重點著重於介紹這兩個主要協議的運作方式。

The Dumb Protocol--啞巴協議

該協議稱為“啞巴協議”,是因為它在傳輸過程中不需要服務端的Git特定代碼; 獲取過程是一系列HTTP GET請求,使用者可以自由的呈現Git倉儲的安排。

Maintenance and Data Recovery

Maintenance and Data Recovery

本章重點在介紹Git內部的維護和數據的恢復,有時Git會自動執行一個名為“auto gc”的指令,大多數情況下,指令不執行操作,但如果有過多的packfiles,則Git會執行git gc的指令,指令會刪除不必要的文件。

當需要恢復檔案時可使用git long和git master兩個指令來進行恢復。

Environment Variables

Environment Variables

Git在bashshell中運行,並使用許多shell環境變量來確定它的行為方式。

GIT_EXEC_PATH:可透過運行檢查當前設置git --exec-path

HOME:它是Git查找全局配置文件的地方。

GIT_CONFIG_NOSYSTEM:如果您的系統配置干擾了您的指令,但是您無權更改或刪除它,這將非常有用。

設置提交者的名字: GIT_COMMITTER_NAME

“提交者”字段的電子郵件地址: GIT_COMMITTER_EMAIL

用於“提交者”字段中的日期: GIT_COMMITTER_DATE

Summy

Summary

功能很強的系統工具-Git

可以輕鬆使用它作為VCS。本章介紹了許多管道指令 - 這些指令使用戶在使用上更家簡單。

A3

git config

git config命令幾乎已在本書的每一章中使用

在初次設置Git中,我們在開始使用Git之前用它來指定我們的名字,電子郵件地址和編輯器首選項

git init

我們使用此命令在“將空白倉儲放到服務器上”中為服務器創建一個空的空白倉儲。

gitstatus

git status命令將顯示工作目錄和暫存區域中文件的不同狀態。哪些文件已修改和未分階段,哪些文件已暫存但尚未提交。
在它的正常形式中,它還將向您展示如何在這些階段之間移動文件的一些基本提示。

git diff

當您想要查看任意兩棵樹之間的差異時,將使用該命令。
這可能是您的工作環境和臨時區域(單獨git diff),暫存區域和上次提交(git diff --staged)之間,或兩個提交(git diff master branchB之間的差異


git difftool

只是啟動一個外部工具,以顯示兩棵樹之間的區別,以防您想使用內置git diff命令之外的其他內容


git reset

主要用於撤消操作,您可以通過動詞來判斷。它在HEAD指針周圍移動並可選地更改index或暫存區域,如果使用,還可以選擇更改工作目錄
如果使用不當,此最終選項可能會導致此命令丟失,因此請確保在使用之前了解它。


git rm

用於從登台區域和Git的工作目錄中刪除文件。它類似於git add它為下一次提交分階段刪除文件。


git mv

是一個簡單的便捷命令,用於移動文件,然後git add在新文件和git rm舊文件上運行。我們只在移動檔案中簡要提一下這個命令

git mergetool
git mergetool命令只是啟動一個外部合併幫助程序,以防您在Git中遇到合併題。
git stash
用於臨時存儲未提交的工作,以便清除工作目錄,而無需在分支上提交未完成的工作。這基本上完全涵蓋在Stashing和Cleaning中。

A3-1

git tag
git tag命令用於為代碼歷史記錄中的特定點提供永久書籤。通常,這用於發布容。
git fetch
git fetch命令與遠程存儲庫通信,並獲取該存儲庫中當前不存在的所有信息,並將其存儲在本地數據庫中。
git remote
git remote命令是用於記錄遠程存儲庫的管理工具。它允許您將長URL保存,例如“origin”,這樣您就不必一直輸出它們。您可以使用其中的幾個,該git remote命令用於添加,更改和刪除它們。
git archive
git archive命令用於創建項目特定快照的存檔文件。我們git archive用來創建一個項目的tarball,用於在準備釋出一個版本中進行共享。
git submodule
git submodule命令用於管理正常存儲庫中的外部存儲庫。這可能適用於庫或其他類型的共享資源。該submodule命令具有若干子命令(addupdatesync,等),用於管理這些資源。
git show
git show命令可以以簡單且可讀的方式顯示Git對象。通常,您可以使用它來顯示有關標記或提交的信息。

git shortlog
git shortlog命令用於匯總輸出git log。該命令將採用許多相同的選項,git log但它不會列出所有提交,而是顯示按作者分組的提交的摘要。

8.1

(有工具可以解決圖形衝突)

外部合併和差異工具

您可以設置一個外部工具,來自動解決圖形衝突,而不必手動解決。

強制視覺合併工具" (P4Merge) 來執行差異和合併解析度, 因為它是一個不錯的圖形工具, 並且是免費的。

8.2

Git 屬性資料還允許您在匯出專案存檔時執行一些有趣的操作。

您可以告訴 Git 在生成存檔時不要匯出某些檔或目錄。如果有一個子目錄或檔不希望包含在存檔檔中, 但您確實希望簽入專案, 則可以通過export-ignore確定這些檔。

例如, 假設您在test/子目錄中有一些測試檔案, 而將它們包含在專案的 tarball 匯出中是沒有意義的。您可以將以下行添加到 Git 屬性檔中:

test/ export-ignore

合併策略

您還可以使用 Git 屬性告訴 Git 對專案中的特定檔使用不同的合併策略。一個非常有用的選擇是告訴 Git 不要嘗試合併特定的檔時, 他們有衝突, 而是使用你的一方合併超過別人的。

如果專案中的分支存在分歧或是專用的, 但您希望能夠將更改合併回其中, 並且希望忽略某些檔, 這將很有説明。假設您有一個名為database.xml " 的資料庫設置檔, 該檔在兩個分支中是不同的, 並且您希望在不弄亂資料庫檔案的情況下合併到其他分支中。

8.3


整理 自訂Git Hooks

教你一些鉤子的用法並告訴妳這些能尬麻? 使用鉤子來檢查提交消息是否符合所需的模式等等…..

4種掛鉤與提交過程有關

新興工作流程掛鉤

電子郵件工作流程掛鉤

其他用戶端掛鉤

伺服器端掛鉤

注意: 此腳本無法停止推送過程, 但用戶端在完成之前不會斷開連接, 因此, 如果您嘗試執行任何可能需要很長時間的操作, 請務必小心。

8.4

本章要用你所學過的知識來建一個git工作流,並將構建用戶端腳本, 以説明開發人員知道他們的推送是否會被拒絕, 以及實際強制實施策略的伺服器腳本。

7.2

交互式暫存
運行git add時使用-i或者--interactive選項,Git將會進入一個交互式終端模式
$ git add -i
暫存與取消暫存文件
在如果What now>提示符後鍵入2或u,腳本將會提示想要暫存哪個文件
Update>> 1,2

如果在Update>>提示符後不輸入任何東西並直接按回車,Git將會暫存之前選擇的文件
要取消暫存TODO文件,使用3或r(撤消)選項

7.1 工具 - 選擇修訂版本

如何獲取單個與區間提交的多種方法。
簡短的 SHA-1
Git 十分智能,你只需要提供SHA-1 的前幾個字符就可以獲得對應的那次提交,當然你提供的SHA-1 字符數量不得少於4 個,並且沒有歧義——也就是說,當前倉庫中只有一個對像以這段SHA-1 開頭。

假設這個提交是 1c002dd....,如果你想 git show 這個提交,下面的命令是等價的(假設簡短的版本沒有歧義):

$ git show 1c002dd4b536e7479fe34593e72e6c6c1819e53b
$ git show 1c002dd4b536e7479f
$ git show 1c002d

分支引用
你想要查看一個分支的最後一次提交的對象,假設 topic1 分支指ca82a6d ,那麼以下的命令是等價的:
$ git show ca82a6dff817ec66f44342007202690a93763949
$ git show topic1
rev-parse 的 Git 探測工具
想知道某個分支指向哪個特定的 SHA-1,或者看任何一個例子中被簡寫的 SHA-1

引用日誌
你可以使用 git reflog 来查看引用日誌

查看你的master分支在昨天的時候指向了哪個提交
$ git show master@{yesterday}

運行可以git log -g來查看類似於git log輸出格式的引用日誌信息
祖先引用
你可以使用HEAD^來查看上一個提交,也就是“HEAD的父提交”:
$ git show HEAD^

後面添加一個數字 - 例如d921970^2代表“d921970的第二父提交”這個語法只適用於合併(merge)的提交
$ git show d921970^2

另一種指明祖先提交的方法是~,因此HEAD~和HEAD^是等價的
提交區間
$ git log master..experiment
查看在master分支中而不在experiment分支中的提交
$ git log experiment..master
多點
下列3個命令是等價的:
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
所有被refA或refB包含的但是不被refC包含的提交
$ git log refA refB ^refC
$ git log refA refB --not refC
三點
master或者experiment中所有遊戲的但不是兩者教育學習語言文字的提交
$ git log master...experiment

ssh金鑰 << Previous Next >> V-rep