中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Git2面試題示例

發布時間:2021-03-12 10:31:32 來源:億速云 閱讀:160 作者:小新 欄目:軟件技術

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

關于 Git 面試的第一個問題必須是:

1. Git和SVN有什么區別?

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

2. 什么是Git?

我建議你先通過了解 git 的架構再來回答這個問題,如下圖所示,試著解釋一下這個圖:

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

 ● 與 SVN 等其他版本控制系統(VCS)相比,其分布式架構具有許多優勢,一個主要優點是它不依賴于中央服務器來存儲項目文件的所有版本。

 ● 每個開發人員都可以“克隆”我在圖中用“Local repository”標注的存儲庫的副本,并且在他的硬盤驅動器上具有項目的完整歷史記錄,因此當服務器中斷時,你需要的所有恢復數據都在你隊友的本地 Git 存儲庫中。

 ● 還有一個中央云存儲庫,開發人員可以向其提交更改,并與其他團隊成員進行共享,如圖所示,所有協作者都在提交更改“遠程存儲庫”。

Git2面試題示例

下一組 Git 面試問題將測試你使用 Git 的體驗:

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

答案非常簡單。
用于寫入提交的命令是 git commit -a

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

4. 什么是 Git 中的“裸存儲庫”?

你應該說明 “工作目錄” 和 “裸存儲庫” 之間的區別。

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

 1.一個 .git 子目錄,其中包含你的倉庫所有相關的 Git 修訂歷史記錄。

 2.工作樹,或簽出的項目文件的副本。

5. Git 是用什么語言編寫的?

你需要說明使用它的原因,而不僅僅是說出語言的名稱。我建議你這樣回答:

Git使用 C 語言編寫。 GIT 很快,C 語言通過減少運行時的開銷來做到這一點。

6. 在Git中,你如何還原已經 push 并公開的提交?

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
這個問題可以有兩個答案,你回答時也要保包含這兩個答案,因為根據具體情況可以使用以下選項:

 ● 刪除或修復新提交中的錯誤文件,并將其推送到遠程存儲庫。這是修復錯誤的最自然方式。對文件進行必要的修改后,將其提交到我將使用的遠程存儲庫

git commit -m "commit message"

 ● 創建一個新的提交,撤消在錯誤提交中所做的所有更改。可以使用命令:

git revert <name of bad commit>

7. git pull 和 git fetch 有什么區別?

git pull 命令從中央存儲庫中提取特定分支的新更改或提交,并更新本地存儲庫中的目標分支。

git fetch 也用于相同的目的,但它的工作方式略有不同。當你執行 git fetch 時,它會從所需的分支中提取所有新提交,并將其存儲在本地存儲庫中的新分支中。如果要在目標分支中反映這些更改,必須在 git fetch 之后執行git merge。只有在對目標分支和獲取的分支進行合并后才會更新目標分支。為了方便起見,請記住以下等式:

<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:
可以通過下圖進行解釋:

在完成提交之前,可以在稱為“staging area”或“index”的中間區域中對其進行格式化和審查。從圖中可以看出,每個更改首先在暫存區域中進行驗證,我將其稱為“stage file”,然后將更改提交到存儲庫。

Git2面試題示例

9. 什么是 git stash?

首先應該解釋 git stash 的必要性。

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

再解釋什么是git stash。

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

10. 什么是git stash drop?

通過說明我們使用 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}

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

對于這個問題,不能僅僅是提供命令,還要解釋這個命令究竟做了些什么。

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

git diff-tree -r {hash}

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

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

輸出還將包含一些額外信息,可以通過包含兩個標志把它們輕松的屏蔽掉:

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

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

12. 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。

13. 提交對象包含什么?

Commit 對象包含以下組件,你應該提到以下這三點:

 ● 一組文件,表示給定時間點的項目狀態

 ● 引用父提交對象

 ● SHAI 名稱,一個40個字符的字符串,提交對象的唯一標識。

14. 如何在Git中創建存儲庫?

這可能是最常見的問題,答案很簡單。

要創建存儲庫,先為項目創建一個目錄(如果該目錄不存在),然后運行命令 git init。通過運行此命令,將在項目的目錄中創建 .git 目錄。

15. 怎樣將 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})"

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

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

Git bisect 用于查找使用二進制搜索引入錯誤的提交。 Git bisect的命令是

git bisect <subcommand> <options>

既然你已經提到過上面的命令,那就解釋一下這個命令會做什么。

此命令用了二進制搜索算法來查找項目歷史記錄中的哪個提交引入了錯誤。你可以通過告訴它已知包含該錯誤的“錯誤”提交以及在引入錯誤之前已知的“良好”提交來使用它。然后 git bisect 在這兩個端點之間選擇一個提交,并詢問你所選的提交是“好”還是“壞”。它繼續縮小范圍,直到找到引入更改的確切提交。

17. 如果想要在提交之前運行代碼性檢查工具,并在測試失敗時阻止提交,該怎樣配置 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 狀態退出,腳本會有效地阻止提交操作。

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

這個問題被要求用Git來測試你的分支經驗,告訴他們你在以前的工作中如何使用分支以及它的用途是什么,你可以參考以下提到的要點:

 ● 功能分支(Feature branching)

要素分支模型將特定要素的所有更改保留在分支內。當通過自動化測試對功能進行全面測試和驗證時,該分支將合并到主服務器中。

 ● 任務分支(Task branching)

在此模型中,每個任務都在其自己的分支上實現,任務鍵包含在分支名稱中。很容易看出哪個代碼實現了哪個任務,只需在分支名稱中查找任務鍵。

 ● 發布分支(Release branching)

一旦開發分支獲得了足夠的發布功能,你就可以克隆該分支來形成發布分支。創建該分支將會啟動下一個發布周期,所以在此之后不能再添加任何新功能,只有錯誤修復,文檔生成和其他面向發布的任務應該包含在此分支中。一旦準備好發布,該版本將合并到主服務器并標記版本號。此外,它還應該再將自發布以來已經取得的進展合并回開發分支。

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

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

答案很直接。

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

git branch –merged 它列出了已合并到當前分支的分支。

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

20. 什么是SubGit?

SubGit 是將 SVN 到 Git遷移的工具。它創建了一個可寫的本地或遠程 Subversion 存儲庫的 Git 鏡像,并且只要你愿意,可以隨意使用 Subversion 和 Git。

這樣做有很多優點,比如你可以從 Subversion 快速一次性導入到 Git 或者在 Atlassian Bitbucket Server 中使用SubGit。我們可以用 SubGit 創建現有 Subversion 存儲庫的雙向 Git-SVN 鏡像。你可以在方便時 push 到 Git 或提交 Subversion。同步由 SubGit 完成。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

git
AI

涞水县| 建湖县| 苏尼特左旗| 石林| 民乐县| 东源县| 高尔夫| 儋州市| 饶阳县| 抚远县| 夏河县| 辛集市| 青铜峡市| 右玉县| 瓦房店市| 苏尼特左旗| 兰考县| 中牟县| 措美县| 精河县| 灵川县| 蓬安县| 浦县| 株洲县| 惠东县| 石门县| 乌兰浩特市| 诸城市| 绍兴市| 定襄县| 峡江县| 乃东县| 麟游县| 新竹县| 铜川市| 女性| 开化县| 青冈县| 云和县| 甘南县| 会宁县|