Ubuntu檢視並修改主機名的方法
寫在前面,這篇文章可以理解是git整理,我只是個搬運工,尊重原創,在哪看的也找不到了,友情提示:這些git知識我沒工作的時候自己學習了兩遍,但還是很懵懂,只是短暫的記憶,經常用才能記住,不用忘得也很快,(可能是我年齡大了)一定要結合專案來理解記憶
Git
Git和SVN有什麼區別?
git | svn |
---|---|
Git是一個分散式的版本控制工具 | SVN 是集中版本控制工具 |
它屬於第3代版本控制工具 | 它屬於第2代版本控制工具 |
客戶端可以在其本地系統上克隆整個儲存庫 | 版本歷史記錄儲存在伺服器端儲存庫中 |
即使離線也可以提交 | 只允許線上提交 |
Push/pull 操作更快 | Push/pull 操作較慢 |
工程可以用 commit 自動共享 | 沒有任何東西自動共享 |
什麼是Git?
Git 是分散式版本控制系統(DVCS)。它可以跟蹤檔案的更改,並允許你恢復到任何特定版本的更改。
與 SVN 等其他版本控制系統(VCS)相比,其分散式架構具有許多優勢,一個主要優點是它不依賴於中央伺服器來儲存專案檔案的所有版本。
每個開發人員都可以“克隆”我在圖中用“Local repository”標註的儲存庫的副本,並且在他的硬碟驅動器上具有專案的完整歷史記錄,因此當伺服器中斷時,你需要的所有恢復資料都在你隊友的本地 Git 儲存庫中。
還有一箇中央雲端儲存庫,開發人員可以向其提交更改,並與其他團隊成員進行共享,如圖所示,所有協作者都在提交更改“遠端儲存庫”。
在 Git 中提交的命令是什麼?
用於寫入提交的命令是 git commit -a。
現在解釋一下 -a 標誌, 通過在命令列上加 -a 指示 git 提交已修改的所有被跟蹤檔案的新內容。還要提一下,如果你是第一次需要提交新檔案,可以在在 git commit -a 之前先 git add
什麼是 Git 中的“裸儲存庫”?
Git 中的 “裸” 儲存庫只包含版本控制資訊而沒有工作檔案(沒有工作樹),並且它不包含特殊的 .git 子目錄。相反,它直接在主目錄本身包含 .git 子目錄中的所有內容,其中工作目錄包括:
一個 .git 子目錄,其中包含你的倉庫所有相關的 Git 修訂歷史記錄。
工作樹,或簽出的專案檔案的副本。
Git 是用什麼語言編寫的?
Git使用 C 語言編寫。 GIT 很快,C 語言通過減少執行時的開銷來做到這一點。
在Git中,你如何還原已經 push 並公開的提交?
刪除或修復新提交中的錯誤檔案,並將其推送到遠端儲存庫。這是修復錯誤的最自然方式。對檔案進行必要的修改後,將其提交到我將使用的遠端儲存庫
git commit -m "commit message"
建立一個新的提交,撤消在錯誤提交中所做的所有更改。可以使用命令:
git revert
revertL:英 /rɪˈvɜːt/
vi. 回覆;重提;返祖遺傳;歸還
vt. 使恢復原狀
n. 恢復原狀者
git pull 和 git fetch 有什麼區別?(面試這個問題又被問到)
git pull 命令從中央儲存庫中提取特定分支的新更改或提交,並更新本地儲存庫中的目標分支。
git fetch 也用於相同的目的,但它的工作方式略有不同。當你執行 git fetch 時,它會從所需的分支中提取所有新提交,並將其儲存在本地儲存庫中的新分支中。如果要在目標分支中反映這些更改,必須在 git fetch 之後執行git merge。只有在對目標分支和獲取的分支進行合併後才會更新目標分支。為了方便起見,請記住以下等式:
git pull = git fetch + git merge
git中的“staging area”或“index”是什麼?‘
在完成提交之前,可以在稱為“staging area”或“index”的中間區域中對其進行格式化和審查。從圖中可以看出,每個更改首先在暫存區域中進行驗證,我將其稱為“stage file”,然後將更改提交到儲存庫。
什麼是 git stash?
首先應該解釋 git stash 的必要性。
通常情況下,當你一直在處理專案的某一部分時,如果你想要在某個時候切換分支去處理其他事情,事情會處於混亂的狀態。問題是,你不想把完成了一半的工作提交,以便你以後就可以回到當前的工作。解決這個問題的答案是 git stash。
再解釋什麼是git stash。
stash 會將你的工作目錄,即修改後的跟蹤檔案和暫存的更改儲存在一堆未完成的更改中,你可以隨時重新應用這些更改。
什麼是git stash drop?
git stash drop 命令用於刪除隱藏的專案。預設情況下,它將刪除最後新增的儲存項,如果提供引數的話,它還可以刪除特定項。
下面舉個例子。
如果要從隱藏專案列表中刪除特定的儲存專案,可以使用以下命令:
git stash list:它將顯示隱藏專案列表,如:
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert “added file_size”
stash@{2}: WIP on master: 21d80a5 added number to log
如果要刪除名為 stash@{0} 的專案,請使用命令 git stash drop stash@{0}。
如何找到特定提交中已更改的檔案列表?
對於這個問題,不能僅僅是提供命令,還要解釋這個命令究竟做了些什麼。
要獲取特定提交中已更改的列表檔案,請使用以下命令:
git diff-tree -r {hash}
給定提交雜湊,這將列出在該提交中更改或新增的所有檔案。 -r 標誌使命令列出單個檔案,而不是僅將它們摺疊到根目錄名稱中。
你還可以包括下面提到的內容,雖然它是可選的,但有助於給面試官留下深刻印象。
輸出還將包含一些額外資訊,可以通過包含兩個標誌把它們輕鬆的遮蔽掉:
git diff-tree –no-commit-id –name-only -r {hash}
這裡 -no-commit-id 將禁止提交雜湊值出現在輸出中,而 -name-only 只會列印檔名而不是它們的路徑。
git config 的功能是什麼?
首先說明為什麼我們需要 git config。
git 使用你的使用者名稱將提交與身份相關聯。 git config 命令可用來更改你的 git 配置,包括你的使用者名稱。
下面用一個例子來解釋。
假設你要提供使用者名稱和電子郵件 ID 用來將提交與身份相關聯,以便你可以知道是誰進行了特定提交。為此,我將使用:
git config –global user.name "Your Name": 此命令將新增使用者名稱。
git config –global user.email "Your E-mail Address": 此命令將新增電子郵件ID。
提交物件包含什麼?
Commit 物件包含以下元件,你應該提到以下這三點:
一組檔案,表示給定時間點的專案狀態
引用父提交物件
SHAI 名稱,一個40個字元的字串,提交物件的唯一標識。
如何在Git中建立儲存庫?
這可能是最常見的問題,答案很簡單。
要建立儲存庫,先為專案建立一個目錄(如果該目錄不存在),然後執行命令 git init。通過執行此命令,將在專案的目錄中建立 .git 目錄。
怎樣將 N 次提交壓縮成一次提交?
將N個提交壓縮到單個提交中有兩種方式:
如果要從頭開始編寫新的提交訊息,請使用以下命令:
git reset –soft HEAD~N &&
git commit
如果你想在新的提交訊息中串聯現有的提交訊息,那麼需要提取這些訊息並將它們傳給 git commit,可以這樣:
git reset –soft HEAD~N &&
git commit –edit -m"$(git log –format=%B –reverse .HEAD@{N})"
什麼是 Git bisect?如何使用它來確定(迴歸)錯誤的來源?
我建議你先給出一個Git bisect 的小定義。
Git bisect 用於查詢使用二進位制搜尋引入錯誤的提交。 Git bisect的命令是
git bisect
既然你已經提到過上面的命令,那就解釋一下這個命令會做什麼。
此命令用了二進位制搜尋演算法來查詢專案歷史記錄中的哪個提交引入了錯誤。你可以通過告訴它已知包含該錯誤的“錯誤”提交以及在引入錯誤之前已知的“良好”提交來使用它。然後 git bisect 在這兩個端點之間選擇一個提交,並詢問你所選的提交是“好”還是“壞”。它繼續縮小範圍,直到找到引入更改的確切提交。
如果想要在提交之前執行程式碼性檢查工具,並在測試失敗時阻止提交,該怎樣配置 Git 儲存庫?
我建議你先介紹一下完整性檢查。
完整性或冒煙測試用來確定繼續測試是否可行和合理。
下面解釋如何實現這一目標。
這可以通過與儲存庫的 pre-commit hook 相關的簡單指令碼來完成。git 會在提交之前觸發 pre-commit hook。你可以在這個指令碼中執行其他工具,例如 linters,並對提交到儲存庫中的更改執行完整性檢查。
最後舉個例子,你可以參考下面的指令碼:
!/bin/sh
files=$(git diff –cached –name-only –diff-filter=ACM | grep ‘.go$’)
if [ -z files ]; then
exit 0
fi
unfmtd=$(gofmt -l $files)
if [ -z unfmtd ]; then
exit 0
fi
echo “Some .go files are not fmt’d”
exit 1
這段指令碼檢查是否需要通過標準 Go 原始碼格式化工具 gofmt 傳遞所有即將提交的 .go 檔案。如果腳步以非 0 狀態退出,指令碼會有效地阻止提交操作。
描述一下你所使用的分支策略?
這個問題被要求用Git來測試你的分支經驗,告訴他們你在以前的工作中如何使用分支以及它的用途是什麼,你可以參考以下提到的要點:
功能分支(Feature branching)
要素分支模型將特定要素的所有更改保留在分支內。當通過自動化測試對功能進行全面測試和驗證時,該分支將合併到主伺服器中。
任務分支(Task branching)
在此模型中,每個任務都在其自己的分支上實現,任務鍵包含在分支名稱中。很容易看出哪個程式碼實現了哪個任務,只需在分支名稱中查詢任務鍵。
釋出分支(Release branching)
一旦開發分支獲得了足夠的釋出功能,你就可以克隆該分支來形成釋出分支。建立該分支將會啟動下一個釋出週期,所以在此之後不能再新增任何新功能,只有錯誤修復,文件生成和其他面向釋出的任務應該包含在此分支中。一旦準備好釋出,該版本將合併到主伺服器並標記版本號。此外,它還應該再將自發布以來已經取得的進展合併回開發分支。
最後告訴他們分支策略因團隊而異,所以我知道基本的分支操作,如刪除、合併、檢查分支等。
如果分支是否已合併為master,你可以通過什麼手段知道?
要知道某個分支是否已合併為master,你可以使用以下命令:
git branch –merged 它列出了已合併到當前分支的分支。
git branch –no-merged 它列出了尚未合併的分支。
什麼是SubGit?
SubGit 是將 SVN 到 Git遷移的工具。它建立了一個可寫的本地或遠端 Subversion 儲存庫的 Git 映象,並且只要你願意,可以隨意使用 Subversion 和 Git。
這樣做有很多優點,比如你可以從 Subversion 快速一次性匯入到 Git 或者在 Atlassian Bitbucket Server 中使用SubGit。我們可以用 SubGit 建立現有 Subversion 儲存庫的雙向 Git-SVN 映象。你可以在方便時 push 到 Git 或提交 Subversion。同步由 SubGit 完成。