溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Git2面試題示例

發(fā)布時(shí)間:2021-03-12 10:31:32 來(lái)源:億速云 閱讀:152 作者:小新 欄目:軟件技術(shù)

小編給大家分享一下Git2面試題示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

關(guān)于 Git 面試的第一個(gè)問(wèn)題必須是:

1. Git和SVN有什么區(qū)別?

GitSVN
1. Git是一個(gè)分布式的版本控制工具1.  SVN 是集中版本控制工具
2.它屬于第3代版本控制工具2.它屬于第2代版本控制工具
3.客戶(hù)端可以在其本地系統(tǒng)上克隆整個(gè)存儲(chǔ)庫(kù)3.版本歷史記錄存儲(chǔ)在服務(wù)器端存儲(chǔ)庫(kù)中
4.即使離線(xiàn)也可以提交4.只允許在線(xiàn)提交
5.Push/pull 操作更快5.Push/pull 操作較慢
6.工程可以用 commit 自動(dòng)共享6.沒(méi)有任何東西自動(dòng)共享

2. 什么是Git?

我建議你先通過(guò)了解 git 的架構(gòu)再來(lái)回答這個(gè)問(wèn)題,如下圖所示,試著解釋一下這個(gè)圖:

 ● Git 是分布式版本控制系統(tǒng)(DVCS)。它可以跟蹤文件的更改,并允許你恢復(fù)到任何特定版本的更改。

 ● 與 SVN 等其他版本控制系統(tǒng)(VCS)相比,其分布式架構(gòu)具有許多優(yōu)勢(shì),一個(gè)主要優(yōu)點(diǎn)是它不依賴(lài)于中央服務(wù)器來(lái)存儲(chǔ)項(xiàng)目文件的所有版本。

 ● 每個(gè)開(kāi)發(fā)人員都可以“克隆”我在圖中用“Local repository”標(biāo)注的存儲(chǔ)庫(kù)的副本,并且在他的硬盤(pán)驅(qū)動(dòng)器上具有項(xiàng)目的完整歷史記錄,因此當(dāng)服務(wù)器中斷時(shí),你需要的所有恢復(fù)數(shù)據(jù)都在你隊(duì)友的本地 Git 存儲(chǔ)庫(kù)中。

 ● 還有一個(gè)中央云存儲(chǔ)庫(kù),開(kāi)發(fā)人員可以向其提交更改,并與其他團(tuán)隊(duì)成員進(jìn)行共享,如圖所示,所有協(xié)作者都在提交更改“遠(yuǎn)程存儲(chǔ)庫(kù)”。

Git2面試題示例

下一組 Git 面試問(wèn)題將測(cè)試你使用 Git 的體驗(yàn):

3. 在 Git 中提交的命令是什么?

答案非常簡(jiǎn)單。
用于寫(xiě)入提交的命令是 git commit -a

現(xiàn)在解釋一下 -a 標(biāo)志, 通過(guò)在命令行上加 -a 指示 git 提交已修改的所有被跟蹤文件的新內(nèi)容。還要提一下,如果你是第一次需要提交新文件,可以在在 git commit -a 之前先 git add <file>。

4. 什么是 Git 中的“裸存儲(chǔ)庫(kù)”?

你應(yīng)該說(shuō)明 “工作目錄” 和 “裸存儲(chǔ)庫(kù)” 之間的區(qū)別。

Git 中的 “裸” 存儲(chǔ)庫(kù)只包含版本控制信息而沒(méi)有工作文件(沒(méi)有工作樹(shù)),并且它不包含特殊的 .git 子目錄。相反,它直接在主目錄本身包含 .git 子目錄中的所有內(nèi)容,其中工作目錄包括:

 1.一個(gè) .git 子目錄,其中包含你的倉(cāng)庫(kù)所有相關(guān)的 Git 修訂歷史記錄。

 2.工作樹(shù),或簽出的項(xiàng)目文件的副本。

5. Git 是用什么語(yǔ)言編寫(xiě)的?

你需要說(shuō)明使用它的原因,而不僅僅是說(shuō)出語(yǔ)言的名稱(chēng)。我建議你這樣回答:

Git使用 C 語(yǔ)言編寫(xiě)。 GIT 很快,C 語(yǔ)言通過(guò)減少運(yùn)行時(shí)的開(kāi)銷(xiāo)來(lái)做到這一點(diǎn)。

6. 在Git中,你如何還原已經(jīng) push 并公開(kāi)的提交?

There can be two answers to this question and make sure that you include both because any of the below options can be used depending on the situation:    1
這個(gè)問(wèn)題可以有兩個(gè)答案,你回答時(shí)也要保包含這兩個(gè)答案,因?yàn)楦鶕?jù)具體情況可以使用以下選項(xiàng):

 ● 刪除或修復(fù)新提交中的錯(cuò)誤文件,并將其推送到遠(yuǎn)程存儲(chǔ)庫(kù)。這是修復(fù)錯(cuò)誤的最自然方式。對(duì)文件進(jìn)行必要的修改后,將其提交到我將使用的遠(yuǎn)程存儲(chǔ)庫(kù)

git commit -m "commit message"

 ● 創(chuàng)建一個(gè)新的提交,撤消在錯(cuò)誤提交中所做的所有更改??梢允褂妹睿?/p>

git revert <name of bad commit>

7. git pull 和 git fetch 有什么區(qū)別?

git pull 命令從中央存儲(chǔ)庫(kù)中提取特定分支的新更改或提交,并更新本地存儲(chǔ)庫(kù)中的目標(biāo)分支。

git fetch 也用于相同的目的,但它的工作方式略有不同。當(dāng)你執(zhí)行 git fetch 時(shí),它會(huì)從所需的分支中提取所有新提交,并將其存儲(chǔ)在本地存儲(chǔ)庫(kù)中的新分支中。如果要在目標(biāo)分支中反映這些更改,必須在 git fetch 之后執(zhí)行git merge。只有在對(duì)目標(biāo)分支和獲取的分支進(jìn)行合并后才會(huì)更新目標(biāo)分支。為了方便起見(jiàn),請(qǐng)記住以下等式:

<center><h6>git pull = git fetch + git merge</h6></center>

8. git中的“staging area”或“index”是什么?

For this answer try to explain the below diagram as you can see:
可以通過(guò)下圖進(jìn)行解釋?zhuān)?/p>

在完成提交之前,可以在稱(chēng)為“staging area”或“index”的中間區(qū)域中對(duì)其進(jìn)行格式化和審查。從圖中可以看出,每個(gè)更改首先在暫存區(qū)域中進(jìn)行驗(yàn)證,我將其稱(chēng)為“stage file”,然后將更改提交到存儲(chǔ)庫(kù)。

Git2面試題示例

9. 什么是 git stash?

首先應(yīng)該解釋 git stash 的必要性。

通常情況下,當(dāng)你一直在處理項(xiàng)目的某一部分時(shí),如果你想要在某個(gè)時(shí)候切換分支去處理其他事情,事情會(huì)處于混亂的狀態(tài)。問(wèn)題是,你不想把完成了一半的工作的提交,以便你以后就可以回到當(dāng)前的工作。解決這個(gè)問(wèn)題的答案是 git stash。

再解釋什么是git stash。

stash 會(huì)將你的工作目錄,即修改后的跟蹤文件和暫存的更改保存在一堆未完成的更改中,你可以隨時(shí)重新應(yīng)用這些更改。

10. 什么是git stash drop?

通過(guò)說(shuō)明我們使用 git stash drop 的目的來(lái)回答這個(gè)問(wèn)題。

git stash drop 命令用于刪除隱藏的項(xiàng)目。默認(rèn)情況下,它將刪除最后添加的存儲(chǔ)項(xiàng),如果提供參數(shù)的話(huà),它還可以刪除特定項(xiàng)。

下面舉個(gè)例子。

如果要從隱藏項(xiàng)目列表中刪除特定的存儲(chǔ)項(xiàng)目,可以使用以下命令:

git stash list:它將顯示隱藏項(xiàng)目列表,如:

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

如果要?jiǎng)h除名為 stash@{0} 的項(xiàng)目,請(qǐng)使用命令 git stash drop stash@{0}

11. 如何找到特定提交中已更改的文件列表?

對(duì)于這個(gè)問(wèn)題,不能僅僅是提供命令,還要解釋這個(gè)命令究竟做了些什么。

要獲取特定提交中已更改的列表文件,請(qǐng)使用以下命令:

git diff-tree -r {hash}

給定提交哈希,這將列出在該提交中更改或添加的所有文件。 -r 標(biāo)志使命令列出單個(gè)文件,而不是僅將它們折疊到根目錄名稱(chēng)中。

你還可以包括下面提到的內(nèi)容,雖然它是可選的,但有助于給面試官留下深刻印象。

輸出還將包含一些額外信息,可以通過(guò)包含兩個(gè)標(biāo)志把它們輕松的屏蔽掉:

git diff-tree –no-commit-id –name-only -r {hash}

這里 -no-commit-id 將禁止提交哈希值出現(xiàn)在輸出中,而 -name-only 只會(huì)打印文件名而不是它們的路徑。

12. git config 的功能是什么?

首先說(shuō)明為什么我們需要 git config

git 使用你的用戶(hù)名將提交與身份相關(guān)聯(lián)。 git config 命令可用來(lái)更改你的 git 配置,包括你的用戶(hù)名。

下面用一個(gè)例子來(lái)解釋。

假設(shè)你要提供用戶(hù)名和電子郵件 ID 用來(lái)將提交與身份相關(guān)聯(lián),以便你可以知道是誰(shuí)進(jìn)行了特定提交。為此,我將使用:

git config –global user.name "Your Name": 此命令將添加用戶(hù)名。

git config –global user.email "Your E-mail Address": 此命令將添加電子郵件ID。

13. 提交對(duì)象包含什么?

Commit 對(duì)象包含以下組件,你應(yīng)該提到以下這三點(diǎn):

 ● 一組文件,表示給定時(shí)間點(diǎn)的項(xiàng)目狀態(tài)

 ● 引用父提交對(duì)象

 ● SHAI 名稱(chēng),一個(gè)40個(gè)字符的字符串,提交對(duì)象的唯一標(biāo)識(shí)。

14. 如何在Git中創(chuàng)建存儲(chǔ)庫(kù)?

這可能是最常見(jiàn)的問(wèn)題,答案很簡(jiǎn)單。

要?jiǎng)?chuàng)建存儲(chǔ)庫(kù),先為項(xiàng)目創(chuàng)建一個(gè)目錄(如果該目錄不存在),然后運(yùn)行命令 git init。通過(guò)運(yùn)行此命令,將在項(xiàng)目的目錄中創(chuàng)建 .git 目錄。

15. 怎樣將 N 次提交壓縮成一次提交?

將N個(gè)提交壓縮到單個(gè)提交中有兩種方式:

 ● 如果要從頭開(kāi)始編寫(xiě)新的提交消息,請(qǐng)使用以下命令:

git reset –soft HEAD~N &&
git commit

 ● 如果你想在新的提交消息中串聯(lián)現(xiàn)有的提交消息,那么需要提取這些消息并將它們傳給 git commit,可以這樣:

git reset –soft HEAD~N &&
git commit –edit -m"$(git log –format=%B –reverse .HEAD@{N})"

16. 什么是 Git bisect?如何使用它來(lái)確定(回歸)錯(cuò)誤的來(lái)源?

我建議你先給出一個(gè)Git bisect 的小定義。

Git bisect 用于查找使用二進(jìn)制搜索引入錯(cuò)誤的提交。 Git bisect的命令是

git bisect <subcommand> <options>

既然你已經(jīng)提到過(guò)上面的命令,那就解釋一下這個(gè)命令會(huì)做什么。

此命令用了二進(jìn)制搜索算法來(lái)查找項(xiàng)目歷史記錄中的哪個(gè)提交引入了錯(cuò)誤。你可以通過(guò)告訴它已知包含該錯(cuò)誤的“錯(cuò)誤”提交以及在引入錯(cuò)誤之前已知的“良好”提交來(lái)使用它。然后 git bisect 在這兩個(gè)端點(diǎn)之間選擇一個(gè)提交,并詢(xún)問(wèn)你所選的提交是“好”還是“壞”。它繼續(xù)縮小范圍,直到找到引入更改的確切提交。

17. 如果想要在提交之前運(yùn)行代碼性檢查工具,并在測(cè)試失敗時(shí)阻止提交,該怎樣配置 Git 存儲(chǔ)庫(kù)?

我建議你先介紹一下完整性檢查。

完整性或冒煙測(cè)試用來(lái)確定繼續(xù)測(cè)試是否可行和合理。

下面解釋如何實(shí)現(xiàn)這一目標(biāo)。

這可以通過(guò)與存儲(chǔ)庫(kù)的 pre-commit hook 相關(guān)的簡(jiǎn)單腳本來(lái)完成。git 會(huì)在提交之前觸發(fā) pre-commit hook。你可以在這個(gè)腳本中運(yùn)行其他工具,例如 linters,并對(duì)提交到存儲(chǔ)庫(kù)中的更改執(zhí)行完整性檢查。

最后舉個(gè)例子,你可以參考下面的腳本:

#!/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

這段腳本檢查是否需要通過(guò)標(biāo)準(zhǔn) Go 源代碼格式化工具 gofmt 傳遞所有即將提交的 .go 文件。如果腳步以非 0 狀態(tài)退出,腳本會(huì)有效地阻止提交操作。

18. 描述一下你所使用的分支策略?

這個(gè)問(wèn)題被要求用Git來(lái)測(cè)試你的分支經(jīng)驗(yàn),告訴他們你在以前的工作中如何使用分支以及它的用途是什么,你可以參考以下提到的要點(diǎn):

 ● 功能分支(Feature branching)

要素分支模型將特定要素的所有更改保留在分支內(nèi)。當(dāng)通過(guò)自動(dòng)化測(cè)試對(duì)功能進(jìn)行全面測(cè)試和驗(yàn)證時(shí),該分支將合并到主服務(wù)器中。

 ● 任務(wù)分支(Task branching)

在此模型中,每個(gè)任務(wù)都在其自己的分支上實(shí)現(xiàn),任務(wù)鍵包含在分支名稱(chēng)中。很容易看出哪個(gè)代碼實(shí)現(xiàn)了哪個(gè)任務(wù),只需在分支名稱(chēng)中查找任務(wù)鍵。

 ● 發(fā)布分支(Release branching)

一旦開(kāi)發(fā)分支獲得了足夠的發(fā)布功能,你就可以克隆該分支來(lái)形成發(fā)布分支。創(chuàng)建該分支將會(huì)啟動(dòng)下一個(gè)發(fā)布周期,所以在此之后不能再添加任何新功能,只有錯(cuò)誤修復(fù),文檔生成和其他面向發(fā)布的任務(wù)應(yīng)該包含在此分支中。一旦準(zhǔn)備好發(fā)布,該版本將合并到主服務(wù)器并標(biāo)記版本號(hào)。此外,它還應(yīng)該再將自發(fā)布以來(lái)已經(jīng)取得的進(jìn)展合并回開(kāi)發(fā)分支。

最后告訴他們分支策略因團(tuán)隊(duì)而異,所以我知道基本的分支操作,如刪除、合并、檢查分支等。

19. 如果分支是否已合并為master,你可以通過(guò)什么手段知道?

答案很直接。

要知道某個(gè)分支是否已合并為master,你可以使用以下命令:

git branch –merged 它列出了已合并到當(dāng)前分支的分支。

git branch –no-merged 它列出了尚未合并的分支。

20. 什么是SubGit?

SubGit 是將 SVN 到 Git遷移的工具。它創(chuàng)建了一個(gè)可寫(xiě)的本地或遠(yuǎn)程 Subversion 存儲(chǔ)庫(kù)的 Git 鏡像,并且只要你愿意,可以隨意使用 Subversion 和 Git。

這樣做有很多優(yōu)點(diǎn),比如你可以從 Subversion 快速一次性導(dǎo)入到 Git 或者在 Atlassian Bitbucket Server 中使用SubGit。我們可以用 SubGit 創(chuàng)建現(xiàn)有 Subversion 存儲(chǔ)庫(kù)的雙向 Git-SVN 鏡像。你可以在方便時(shí) push 到 Git 或提交 Subversion。同步由 SubGit 完成。

看完了這篇文章,相信你對(duì)“Git2面試題示例”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

git
AI