Git

如果我想在本地送出,為什麼我需要 3 個用於 ikiwiki 的 git 儲存庫

  • June 30, 2016

如果我的筆記型電腦上有一個本地ikiwiki,我需要一個“儲存庫”目錄(mywiki.git- 一個裸儲存庫)、一個“scrdir”(myiki一個 git 儲存庫)和一個生成的 html 文件所在的位置(“destdir”)才能正確執行它從本地網路瀏覽器。

但是,如果我還想在命令行上使用文本編輯器和 git,我需要設置第三個 git 儲存庫說mywiki.local(“工作複製”)。which puhes to mywiki.gitwhich 又會觸發post-updatehook 推送到 scrdir 並重建 html 頁面,如下圖所示:

工作流程

使用這種方法,我的筆記型電腦上需要三個幾乎相同的目錄來執行一個wiki,即它佔用磁碟空間的三倍而不是一次。

這背後的原因是什麼?

如果您只是在一台機器上工作,是否有一種安全的方法可以避免這種情況,將其減少到只有兩個甚至更好的一個目錄?

我已經成功地將 ikiwiki 與 0+ 個儲存庫一起使用。

0..2 是單使用者,所以我還沒有遇到衝突。0..1 只是 ikiwiki 的一個實驗。

這是我嘗試過的:

  • 0 個儲存庫 - 手動編譯,
  • 1 個沒有上游的儲存庫(工作目錄 == srcdir) - 手動編譯,
  • 2 個儲存庫(工作目錄 == srcdir + 上游)
  • 3+ 儲存庫(伺服器上的上述 2 + NB 上的遠端)

隨著 3+ 我們將成為多使用者,所以我希望它會更有趣。

我正在尋找與您相同的問題的答案,所以這裡是答案:

如果您直接編輯 ikiwiki srcdir,如果同一文件由 web-ui 編輯(或被其他使用者推送到裸倉庫),您將遇到衝突。

如果你在 srcdir 中送出,衝突將由 web-ui 處理。

任何未送出的文件更改都將失去

如果您沒有使用 Web 編輯功能,並且沒有其他使用者送出該 repo,那麼您可以使用 2 個 repo。甚至 1 可能會起作用。或 1 個帶有遠端儲存庫。

另外我想在更新/重置 srcdir 之前編寫一個外掛來儲存任何更改會很容易。

似乎有些過分了。可能只處理一個 git 儲存庫。這一切都取決於ikiwiki基礎設施的能力(我對此一無所知)。

為什麼

您希望儲存庫成為裸儲存庫的原因是因為非裸儲存庫幾乎總是會簽出一個分支。其他 git 儲存庫將不允許傳遞到在目標儲存庫上簽出的分支(想像在分支上工作,在您的機器上發生推送,並且文件在您的眼皮底下被更改)。

您也許可以解決srcdir而不是複製“儲存庫”。儘管如果您可以在 Web 端編輯的同時修改文件,這可能會導致資源爭用。此外,如果您手動推送並且推送也發生,它可能會變得一團糟ikiwiki.cgiikiwiki可能會放入您不想在推送中執行的鉤子。出於這個原因,我想他們建議您從“儲存庫”中複製。

Git 的一個特點

當您從本地電腦複製 git 儲存庫時,git 會進行重大優化。如果您使用該--local選項(如果您這樣做,這是預設設置git clone /path/to/repo),它將使用它們共享的公共歷史記錄的硬連結,從而節省磁碟空間。以下是摘錄git help clone

  --local, -l
      When the repository to clone from is on a local machine,
      this flag bypasses the normal "Git aware" transport
      mechanism and clones the repository by making a copy of
      HEAD and everything under objects and refs directories.
      The files under .git/objects/ directory are hardlinked to
      save space when possible.

多餘的磁碟空間不在.git/objects目錄中,而是在結帳本身中。如果這對您來說仍然太過分,那麼您可能需要繼續尋找其他解決方案。

結論

除非您對 的內部運作有很多了解,否則ikiwiki我不會試圖繞過他們推薦的設置方式。我會認為它不安全。如果您想要一個比這更好的答案,您可能想去一個更好的論壇,了解更多關於ikiwiki.

當您意識到 git 執行內部 git 目標文件的硬連結時,額外使用的磁碟空間就不是問題了。

引用自:https://unix.stackexchange.com/questions/136493