成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統(tǒng) Linux
當(dāng)你需要把倉庫恢復(fù)到下午的一個(gè)已知狀態(tài),以便完成一些真正的工作時(shí),該怎么辦?我立刻想到了git branch和git stash 這兩個(gè)經(jīng)典命令,但這兩個(gè)命令都不是用來處理未被跟蹤的文件的,而且文件路徑的改變和其他重大的轉(zhuǎn)變也會讓人困惑,它們只能把工作暫存起來以備后用。解決這個(gè)需求的答案是Git工作樹。

[[393630]]

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

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

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

什么是 Git 工作樹

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

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

  1. $ git branch | tee
  2. * dev
  3. trunk
  4. $ git worktree add -b hotfix ~/code/hotfix trunk
  5. Preparing ../hotfix (identifier hotfix)
  6. HEAD is now at 62a2daf commit

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

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

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

  1. $ git push origin HEAD
  2. $ cd ~/code/myproject

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

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

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

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

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

列出活動工作樹

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

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

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

移動工作樹

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

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

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

  1. $ mkdir ~/Temp
  2. $ git worktree move hotfix ~/Temp
  3. $ git worktree list
  4. /home/seth/code/myproject  15fca84 [dev]
  5. /home/seth/Temp/hotfix     09e585d [master]

移除工作樹

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

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

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

  1. $ git worktree remove prune

何時(shí)使用工作樹

與許多選項(xiàng)一樣,無論是標(biāo)簽還是書簽還是自動備份,都要靠你來跟蹤你產(chǎn)生的數(shù)據(jù),否則可能會變得不堪重負(fù)。不要經(jīng)常使用工作樹,要不你最終會有 20 份存儲庫的副本,每份副本的狀態(tài)都略有不同。我發(fā)現(xiàn)最好是創(chuàng)建一個(gè)工作樹,做需要它的任務(wù),提交工作,然后刪除樹。保持簡單和專注。

重要的是,工作樹為你管理 Git 存儲庫的方式提供了更好的靈活性。在需要的時(shí)候使用它們,再也不用為了檢查另一個(gè)分支上的內(nèi)容而爭先恐后地保存工作狀態(tài)了。 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2014-11-11 14:52:28

程序員工程師

2024-06-20 08:06:30

2021-08-09 07:47:40

Git面試版本

2021-01-22 05:55:12

GitAngularJStype

2021-07-16 07:57:34

ReduxDOM組件

2022-10-09 15:18:31

SwaggerOpenAPI工具

2020-04-27 21:16:34

GTWSGitLinux

2021-11-04 05:43:38

GoKartGo代碼靜態(tài)安全分析

2022-04-27 10:40:38

KubecostKyverno云原生

2020-07-07 13:00:00

Linux壓力測試

2021-08-19 08:36:22

Git ResetGit Revert版本

2021-01-04 13:25:10

Git開源工具

2021-08-17 07:15:16

Git RebaseGit Merge面試

2010-02-22 10:18:29

Python代碼

2022-09-06 11:13:16

接口PipelineHandler

2022-06-06 07:56:12

LUKSLUKS2PBKDF2

2024-11-19 15:28:15

2021-06-15 20:59:14

Kubernetes調(diào)試容器

2012-12-25 13:37:29

Android代碼混淆

2014-05-14 00:50:18

JoyentNode
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人午夜免费福利视频 | 国产精品久久久久婷婷二区次 | 国产精品久久av | 日韩中文字幕视频 | 黄色一级大片视频 | 一级高清视频 | 国产1区 | 亚洲精品一区二区三区在线观看 | 亚洲欧美精品 | 中文字幕在线二区 | 国产成人高清成人av片在线看 | 久久久久久久久国产精品 | 狠狠爱综合网 | 久久综合狠狠综合久久综合88 | 伊人久久麻豆 | 欧美一级毛片免费观看 | 狠狠综合久久av一区二区老牛 | 午夜影院在线观看免费 | 人人艹人人爽 | 国产在线97 | 99久久精品视频免费 | 国产精品久久久久久久久动漫 | 国产欧美一区二区三区久久手机版 | 自拍偷拍第一页 | 亚洲精品视频观看 | 黄色片视频网站 | 狠狠操婷婷 | 久久久精品视频一区二区三区 | 久日精品 | 成人伊人网 | 亚洲精品成人 | 亚洲精品福利在线 | 韩国毛片一区二区三区 | 嫩草视频在线看 | 亚洲一区国产 | 精品区 | 国产美女精品 | 玖玖综合在线 | 免费精品国产 | 91免费在线 | 91看片免费版 |