溫馨提示×

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

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

如何使用Git工作樹對(duì)你的代碼進(jìn)行自由實(shí)驗(yàn)

發(fā)布時(shí)間:2021-10-25 11:36:57 來(lái)源:億速云 閱讀:132 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章給大家分享的是有關(guān)如何使用Git工作樹對(duì)你的代碼進(jìn)行自由實(shí)驗(yàn)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來(lái)看看吧。

獲得自由嘗試的權(quán)利,同時(shí)在你的實(shí)驗(yàn)出錯(cuò)時(shí)可以安全地?fù)碛幸粋€(gè)新的、鏈接的克隆存儲(chǔ)庫(kù)。

Git  的設(shè)計(jì)部分是為了進(jìn)行實(shí)驗(yàn)。如果你知道你的工作會(huì)被安全地跟蹤,并且在出現(xiàn)嚴(yán)重錯(cuò)誤時(shí)有安全狀態(tài)存在,你就不會(huì)害怕嘗試新的想法。不過,創(chuàng)新的部分代價(jià)是,你很可能會(huì)在這個(gè)過程中弄得一團(tuán)糟。文件會(huì)被重新命名、移動(dòng)、刪除、更改、切割成碎片;新的文件被引入;你不打算跟蹤的臨時(shí)文件會(huì)在你的工作目錄中占據(jù)一席之地等等。

簡(jiǎn)而言之,你的工作空間變成了紙牌屋,在“快好了!”和“哦,不,我做了什么?”之間岌岌可危地平衡著。那么,當(dāng)你需要把倉(cāng)庫(kù)恢復(fù)到下午的一個(gè)已知狀態(tài),以便完成一些真正的工作時(shí),該怎么辦?我立刻想到了 git branch 和 git stash 這兩個(gè)經(jīng)典命令,但這兩個(gè)命令都不是用來(lái)處理未被跟蹤的文件的,而且文件路徑的改變和其他重大的轉(zhuǎn)變也會(huì)讓人困惑,它們只能把工作暫存(stash)起來(lái)以備后用。解決這個(gè)需求的答案是 Git 工作樹。

什么是 Git 工作樹

Git 工作樹worktree是 Git 倉(cāng)庫(kù)的一個(gè)鏈接副本,允許你同時(shí)簽出多個(gè)分支。工作樹與主工作副本的路徑是分開的,它可以處于不同的狀態(tài)和不同的分支上。在 Git 中新建工作樹的好處是,你可以在不干擾當(dāng)前工作環(huán)境的情況下,做出與當(dāng)前任務(wù)無(wú)關(guān)的修改、提交修改,然后在以后合并。

直接從 git-worktree 手冊(cè)中找到了一個(gè)典型的例子:當(dāng)你正在為一個(gè)項(xiàng)目做一個(gè)令人興奮的新功能時(shí),你的項(xiàng)目經(jīng)理告訴你有一個(gè)緊急的修復(fù)工作。問題是你的工作倉(cāng)庫(kù)(你的“工作樹”)處于混亂狀態(tài),因?yàn)槟阏陂_發(fā)一個(gè)重要的新功能。你不想在當(dāng)前的沖刺中“偷偷地”進(jìn)行修復(fù),而且你也不愿意把變更暫存起來(lái),為修復(fù)創(chuàng)建一個(gè)新的分支。相反,你決定創(chuàng)建一個(gè)新的工作樹,這樣你就可以在那里進(jìn)行修復(fù):

$ git branch | tee* devtrunk$ git worktree add -b hotfix ~/code/hotfix trunkPreparing ../hotfix (identifier hotfix)HEAD is now at 62a2daf commit

在你的 code 目錄中,你現(xiàn)在有一個(gè)新的目錄叫做 hotfix,它是一個(gè)與你的主項(xiàng)目倉(cāng)庫(kù)相連的 Git 工作樹,它的 HEAD 停在叫做 trunk 的分支上?,F(xiàn)在你可以把這個(gè)工作樹當(dāng)作你的主工作區(qū)來(lái)對(duì)待。你可以把目錄切換到它里面,進(jìn)行緊急修復(fù)、提交、并最終刪除這個(gè)工作樹:

$ cd ~/code/hotfix$ sed -i 's/teh/the/' hello.txt$ git commit --all --message 'urgent hot fix'

一旦你完成了你的緊急工作,你就可以回到你之前的任務(wù)。你可以控制你的熱修復(fù)何時(shí)被集成到主項(xiàng)目中。例如,你可以直接將變更從其工作樹推送到項(xiàng)目的遠(yuǎn)程存儲(chǔ)庫(kù)中:

$ git push origin HEAD$ cd ~/code/myproject

或者你可以將工作樹存檔為 TAR 或 ZIP 文件:

$ cd ~/code/myproject$ git archive --format tar --output hotfix.tar master

或者你可以從單獨(dú)的工作樹中獲取本地的變化:

$ git worktree list/home/seth/code/myproject  15fca84 [dev]/home/seth/code/hotfix     09e585d [master]

從那里,你可以使用任何最適合你和你的團(tuán)隊(duì)的策略合并你的變化。

列出活動(dòng)工作樹

你可以使用 git worktree list 命令獲得工作樹的列表,并查看每個(gè)工作樹簽出的分支:

$ git worktree list/home/seth/code/myproject  15fca84 [dev]/home/seth/code/hotfix     09e585d [master]

你可以在任何一個(gè)工作樹中使用這個(gè)功能。工作樹始終是連接的(除非你手動(dòng)移動(dòng)它們,破壞 Git 定位工作樹的能力,從而切斷連接)。

移動(dòng)工作樹

Git 會(huì)跟蹤項(xiàng)目 .git 目錄下工作樹的位置和狀態(tài):

$ cat ~/code/myproject/.git/worktrees/hotfix/gitdir/home/seth/code/hotfix/.git

如果你需要重定位一個(gè)工作樹,必須使用 git worktree move;否則,當(dāng) Git 試圖更新工作樹的狀態(tài)時(shí),就會(huì)失敗:

$ mkdir ~/Temp$ git worktree move hotfix ~/Temp$ git worktree list/home/seth/code/myproject  15fca84 [dev]/home/seth/Temp/hotfix     09e585d [master]

移除工作樹

當(dāng)你完成你的工作時(shí),你可以用 remove 子命令刪除它:

$ git worktree remove hotfix$ git worktree list/home/seth/code/myproject  15fca84 [dev]

為了確保你的 .git 目錄是干凈的,在刪除工作樹后使用 prune 子命令:

$ git worktree remove prune

感謝各位的閱讀!關(guān)于“如何使用Git工作樹對(duì)你的代碼進(jìn)行自由實(shí)驗(yàn)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎ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