ローカルでコミットするには、なぜikiwikiに3つのgitリポジトリが必要なのですか?

ローカルでコミットするには、なぜikiwikiに3つのgitリポジトリが必要なのですか?

ローカルがある場合iQiWiki私のラップトップには、「repository」ディレクトリ(mywiki.gitデフォルトリポジトリ)、「scrdir」(myikigitリポジトリ)、および生成されたhtmlファイルがある場所(「destdir」)が必要です。ローカルWebブラウザで正しく実行されます。

ただし、コマンドラインでテキストエディタとgitを使用するには、3番目のgitリポジトリmywiki.local(「作業レプリカ」)を設定する必要があります。次の図に示すように、scrdirにプッシュしてhtmlページを再構築するフックをmywiki.gitトリガーするプッシュされる項目は次のとおりです。post-update

作業プロセス

このアプローチでは、サムWikiを実行するために私のラップトップのディレクトリとほぼ同じディレクトリです。つまり、ディスク容量を一度ではなく3倍にします。

その理由は何ですか?

1台のコンピュータでのみ作業している場合は、これを防ぐための安全な方法はありますか? 2つ以上の1つのディレクトリに減らす方法はありますか?

答え1

あまりにも多いようです。 1つの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オブジェクトファイルへのハードリンクを実行していることがわかると、使用される追加のディスク容量は問題になりません。

答え2

私はikiwikiと0個以上のリポジトリを正常に使用しました。

0..2はシングルユーザーなので、まだ競合が発生していません。 0..1は単にikiwikiの実験です。

私が試したことは次のとおりです。

  • 0個のリポジトリ - 手動コンパイル、
  • 1つのリポジトリ(作業ディレクトリ== srcdir)、アップストリームなし - 手動コンパイル、
  • 2つのリポジトリ(作業ディレクトリ== srcdir + upstream)
  • 3つ以上のストレージ(サーバー上の2つ+ NBのリモートストレージ)

3+では、マルチユーザーに切り替える予定なので、より興味深いと予想されます。

私はあなたのような質問に答えを探しています。答えは次のとおりです。

ikiwiki srcdir を直接編集する場合、同じファイルを web-ui で編集するか、別のユーザーがデフォルトのリポジトリにプッシュすると競合が発生します。

srcdirに送信すると、競合はweb-uiで処理されます。

しかし、コミットされていない変更ファイルとして迷うだろう

Web編集機能を使用せずにリポジトリにコミットする他のユーザーがいない場合は、2つのリポジトリを使用できます。 1つでも動作できます。または、リモートリポジトリを使用してください。

また、srcdirが更新/リセットされる前に変更を保存するプラグインを作成するのは簡単だと思いました。

関連情報