国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

接上篇:Git Worktree 高級(jí)使用,這樣清爽多了

番茄西紅柿 / 3222人閱讀

摘要:前言前言上一篇文章大法真香帶大家了解了是如何幫助我同時(shí)在多個(gè)分支工作,并且互不影響的。但是最新的時(shí),卻能看到的文件,這正是的魔法所在到這里,就解釋完了。

前言

上一篇文章 Git Worktree 大法真香 帶大家了解了 git worktree 是如何幫助我同時(shí)在多個(gè)分支工作,并且互不影響的。但是創(chuàng)建 worktree 的目錄位置不是在當(dāng)前項(xiàng)目下,總感覺創(chuàng)建好的這些 worktree 不屬于當(dāng)前項(xiàng)目,這對(duì)于磁盤管理強(qiáng)迫癥的我來說是十分難受的,今天就帶大家了解一種高級(jí)用法來解決這個(gè)痛點(diǎn)

準(zhǔn)備知識(shí)

在使用高級(jí)用法之前,你需要知道一點(diǎn) bare repo 知識(shí),我們先從你熟悉的命令開始

git initgit clone https://github.com/FraserYu/amend-crash-demo.git

這兩個(gè)命令就會(huì)生成一個(gè) non-bare repo,我們通常都在這樣的 repo 中進(jìn)行日常工作, 你可以在這里面 add/commit/pull/push

要想生成一個(gè) bare repo 也很簡單, 只需在上面兩個(gè)命令的基礎(chǔ)上加上 --bare 參數(shù)即可

git init --baregit clone --bare https://github.com/FraserYu/amend-crash-demo.git

來執(zhí)行這兩個(gè) clone 命令,并查看文件內(nèi)容你就會(huì)看出差別了

  1. bare repo 僅僅包含 Git 相關(guān)信息,并不包含我們的實(shí)際項(xiàng)目文件(.java/.js/.py), 而 non-bare repo 卻包含我們的全部信息
  2. bare repo 名稱默認(rèn)是帶有 .git 后綴的,這也恰恰證明了第一點(diǎn)
  3. bare repo 中是不存在 .git 文件夾的,這也就導(dǎo)致它不能像 non-bare repo 那樣 add/commit/pull/push

看到這,你可能感覺 bare repo 就是一個(gè) Git 空殼文件夾,一無是處。其實(shí)不然,正因?yàn)?bare repo 的這些特性(不能對(duì)它進(jìn)行更改),也就避免 repo 里面的內(nèi)容被弄的一團(tuán)糟,所以可以被用來做私有的中心化 repo,一張圖解釋,其實(shí)就是這樣的:

如果你有興趣,可以按照下面的命令在本地實(shí)驗(yàn)一下整個(gè)過程:

user@server:$~  git init --bare name_to_repo.gituser@machine1:$~ git clone user@server:/path/to/repo/name_to_repo.git .user@machine1:$~ cd name_to_repouser@machine1:$~ touch READMEuser@machine1:$~ echo "Hello world" >> READMEuser@machine1:$~ git add READMEuser@machine1:$~ git commit -m "Adding a README"user@machine1:$~ git push origin masteruser@server:$~ ls /path/to/repo/name_to_repo.git/branches/ config description HEAD hooks/ info/ objects/ refs/user@machine2:$~ git clone user@server:/path/to/repo/name_to_repo.git .user@machine2:$~ ls name_to_repo.git/READMEuser@machine2:$~ cat READMEHello world

實(shí)驗(yàn)結(jié)果就是:無論在 machine1 下怎么 push 文件,bare repo 中都不會(huì)存在你 push 的文件,只有 Git 相關(guān)信息。但是 machine2 clone 最新的 repo 時(shí),卻能看到machine1 push 的文件,這正是 Git 的魔法所在

到這里,bare repo 就解釋完了。接下來,接上一篇 Git Worktree 大法真香 內(nèi)容,借助 bare repo 的特性,來優(yōu)化同時(shí)在多個(gè)分支工作的做法吧

Git Worktree 高級(jí)用法

首先,在你選定的目錄下為你的項(xiàng)目(比如這里叫 amend-crash-demo)多帶帶創(chuàng)建一個(gè)文件夾, 并 cd 進(jìn)去

mkdir amend-crash-democd amend-crash-demo

接下來以 bare 的形式 clone 項(xiàng)目代碼, 并將內(nèi)容 clone 到 .bare 文件夾內(nèi):

git clone --bare git@github.com:FraserYu/amend-crash-demo.git .bare

我們還要在當(dāng)前目錄下創(chuàng)建一個(gè) .git 文件,文件內(nèi)容是以 gitdir 的形式指向我們的 .bare 文件夾 (如果不理解 gitdir 的含義,請(qǐng)回看 Git Worktree 大法真香

echo "gitdir: ./.bare" > .git

然后我們要編輯 .bare/config 文件,并修改 [remote "origin"]內(nèi)容,和下面內(nèi)容保持一致(也就是添加第 6 行內(nèi)容),這確保我們創(chuàng)建 worktree 切換分支,可以顯示正確的分支名稱

vim .bare/config# ----------------------------------------------- [remote "origin"]       url = git@github.com:FraserYu/amend-crash-demo.git       fetch = +refs/heads/*:refs/remotes/origin/*

接下來我們就可以創(chuàng)建 worktree 了,首先我們要為 main 分支創(chuàng)建 worktree,因?yàn)?main 分支 HEAD 的指向的 commit-ish 就是你創(chuàng)建其他 worktree 的 commit-ish

git worktree add main# --------------------------------Preparing worktree (checking out main)HEAD is now at 82b8711 add main file

通常我們不會(huì)直接在 main 分支上直接工作,而是創(chuàng)建其它類型的分支,繼續(xù)創(chuàng)建名為 feature/JIRA234-feature3 的 worktree

git worktree add -b "feature/JIRA234-feature3" feature3# ------------------------------------------------Preparing worktree (new branch feature/JIRA234-feature3)HEAD is now at 82b8711 add main file

查看當(dāng)前文件夾的內(nèi)容,你會(huì)發(fā)現(xiàn)只有 mainfeature3 兩個(gè)文件夾(因?yàn)?.bare.git 是隱藏文件夾/文件),這樣是不是相當(dāng)清爽呢?

ls -l# -------------------------------------------total 0drwxr-xr-x  10  rgyb  staff  320 Nov 23 21:44 feature3drwxr-xr-x  10  rgyb  staff  320 Nov 23 21:36 mainls -al# -------------------------------------------total 8drwxr-xr-x   6  rgyb  staff  192 Nov 23 21:44  .drwxr-xr-x   3  rgyb  staff   96 Nov 23 21:14   ..drwxr-xr-x  12  rgyb  staff  384 Nov 23 21:36  .bare-rw-r--r--   1  rgyb  staff   16 Nov 23 21:29   .gitdrwxr-xr-x  10  rgyb  staff  320 Nov 23 21:44  feature3drwxr-xr-x  10  rgyb  staff  320 Nov 23 21:36  main

接下來就可以盡情的在我們的各種分支上,彼此互不影響的進(jìn)行 add/commit/pull/push 操作了

echo "feature3 development" > feature3.yamlgit add feature3.yamlgit commit -m "feat: [JIRA234-feature3] feature3 development"# ------------------------------------------------------------------[feature/JIRA234-feature3 aeaac94] feat: [JIRA234-feature3] feature3 development 1 file changed, 1 insertion(+) create mode 100644 feature3.yamlgit push --set-upstream origin feature/JIRA234-feature3

通過上一篇文章 worktree 的四個(gè)命令,多分支協(xié)同開發(fā)不再是問題:

git worktree addgit worktree list# ------------------------------------------------------------------------------------------------/Users/rgyb/Documents/projects/amend-crash-demo/.bare        (bare)/Users/rgyb/Documents/projects/amend-crash-demo/feature3   aeaac94 [feature/JIRA234-feature3]/Users/rgyb/Documents/projects/amend-crash-demo/main        82b8711 [main]git worktree removegit worktree prune

總結(jié)

通過借助 bare repo 的特性,我們可以非常整潔的將所有 worktree 只管理在當(dāng)前項(xiàng)目目錄下,多分支協(xié)同開發(fā),就像這樣:

.└── amend-crash-demo    ├── feature3    │   ├── README.md    │   ├── config.yaml    │   ├── feat1.txt    │   ├── feature3.yaml    │   ├── file1.yaml    │   ├── hotfix.yaml    │   ├── main.properties    │   └── main.yaml    └── main        ├── README.md        ├── config.yaml        ├── feat1.txt        ├── file1.yaml        ├── hotfix.yaml        ├── main.properties        └── main.yaml3 directories, 15 files

如果你有磁盤管理強(qiáng)迫癥,這絕對(duì)是個(gè)好辦法。

如果你想更好的理解整個(gè)過程,你需要在操作本文命令的同時(shí),查看 Git 相關(guān)的文件信息

有什么問題,留言區(qū)交流

參考

  1. https://www.blopig.com/blog/2017/06/using-bare-git-repos/
  2. https://lists.mcs.anl.gov/pipermail/petsc-dev/2021-May/027448.html
  3. https://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/
  4. https://infrequently.org/2021/07/worktrees-step-by-step/
  5. https://morgan.cugerone.com/blog/how-to-use-git-worktree-and-in-a-clean-way/
    個(gè)人博客:https://dayarch.top
    加我微信好友, 進(jìn)群娛樂學(xué)習(xí)交流,備注「進(jìn)群」

歡迎持續(xù)關(guān)注公眾號(hào):「日拱一兵」

  • 前沿 Java 技術(shù)干貨分享
  • 高效工具匯總 | 回復(fù)「工具」
  • 面試問題分析與解答
  • 技術(shù)資料領(lǐng)取 | 回復(fù)「資料」

以讀偵探小說思維輕松趣味學(xué)習(xí) Java 技術(shù)棧相關(guān)知識(shí),本著將復(fù)雜問題簡單化,抽象問題具體化和圖形化原則逐步分解技術(shù)問題,技術(shù)持續(xù)更新,請(qǐng)持續(xù)關(guān)注......


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/125373.html

相關(guān)文章

  • 同時(shí)在多個(gè) Git 分支上工作,老板要榨干我

    摘要:背景上一篇文章保持清潔的提交記錄,三招就夠了,大家看過后有私下留言說這是非常好用的功能,我突然想到工作中用到的另外一個(gè)功能那也是相當(dāng)好用,必須全盤托出作為程序員的我們應(yīng)該都有一個(gè)感受,一旦進(jìn)入某個(gè)項(xiàng)目,從開發(fā),到發(fā)布生產(chǎn),到,到背景上一篇文章 保持清潔的Git提交記錄,三招就夠了 ,大家看過后有私下留言說這是非常好用的功能,我突然想到工作中用到的另外一個(gè) Git 功能那也是相當(dāng)好用,必須全盤...

    番茄西紅柿 評(píng)論0 收藏2637
  • PHP實(shí)現(xiàn)markdown文檔管理工具

    摘要:工作后一直在從事開發(fā)從以前的大包大攬到現(xiàn)在的退居服務(wù)端寫接口當(dāng)中接觸過幾個(gè)的接口文檔管理工具或系統(tǒng)簡單描述下功能全面而且簡潔有用戶權(quán)限管理功能支持支持導(dǎo)出有多種文檔模板目錄支持兩級(jí)折疊功能強(qiáng)大權(quán)限管理郵件提醒全文搜索插件管理等重收費(fèi)的一個(gè)文 工作后一直在從事PHP開發(fā), 從以前的大包大攬到現(xiàn)在的退居服務(wù)端寫接口, 當(dāng)中接觸過幾個(gè)的接口文檔管理工具或系統(tǒng), 簡單描述下: showdoc...

    wpw 評(píng)論0 收藏0
  • ApacheCN 翻譯活動(dòng)進(jìn)度公告 2019.5.3

    摘要:版筆記等到中文字幕翻譯完畢后再整理。數(shù)量超過個(gè),在所有組織中排名前。主頁歸檔社區(qū)自媒體平臺(tái)微博知乎專欄公眾號(hào)博客園簡書合作侵權(quán),請(qǐng)聯(lián)系請(qǐng)抄送一份到贊助我們 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 我們組織了一個(gè)開源互助平臺(tái),方便開源組織和大...

    tuniutech 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<