2

私の同僚と私は、集中管理された (問題がある場合は ubuntu) サーバー上にあるいくつかのリポジトリを使用しています。私たちのいくつかのプロジェクトでは、同じ 4 つのリポジトリを多くの異なるプロジェクトのサブリポジトリとして含めています。これは、ネットワークを介してすべてを転送するのに時間がかかるなどの理由で、多くの異なるプロジェクトにわたって 4 つの異なるサブリポジトリを常にプッシュ/プル/マージしていると、少しイライラする可能性があります。

これら 4 つのリポジトリを 1 つのマスター リポジトリに結合して、今後のすべてのプロジェクトに含めることができるようにしたいと考えています。問題は、古いサブリポジトリを削除したくないということです。削除すると、正常に機能している既存のプロジェクトが壊れてしまうからです。

これらの古いリポジトリを非推奨として指定する方法、または少なくとも、私の同僚がこれらのリポジトリに新しい変更セットをプッシュして役立つエラー メッセージを表示することを不可能にする方法があれば、素晴らしいことです。これは、おそらくこの接線 Q/A が示唆するように水銀フックを使用して可能ですか?

4

2 に答える 2

1

私は、ファイル システムのアクセス許可を操作することにはあまり関心がありませんでした。なぜなら、それは私の同僚にとって非常に有用なエラー メッセージを提供しないからです。prechangeset hookを使用して、これを (mercurial 2.3 で) 達成できました。まず、非推奨にする共有リポジトリにフックを保存するファイル (この場合は .hg/deprecated.py) を作成します。

# .hg/deprecated.py
import sys
import textwrap

# print out a helpful error message in red to make it obvious things
# are not working
msg = "ERROR: Pushing changesets into this repository is no longer supported. "
msg += "This package has been merged into the /path/to/new/repo repository."
print('\033[%im%s\033[0m'%(31, textwrap.fill(msg)))

# return a non-zero exit code to disallow the changeset to be added to the 
# target repository
sys.exit(1)

次に、以下を .hg/hgrc ファイルに追加して、変更セットがリポジトリに追加される前にこのフックを実行するように mercurial に指示します。

# .hg/hgrc
[hooks]
prechangegroup.deprecate = python .hg/deprecate.py

このソリューションは、リポジトリがアクティブでないことをコーダーに警告し、変更をコミットする場所をコーダーに指示し、コーダーが非推奨のリポジトリにコードをコミットするのを防ぎます。これは、ファイルシステムのアクセス許可を操作するほど永続的な解決策ではありませんが、新しいリポジトリの場所を人々に指示します. 他の誰かがこれが役に立つことを願っています!

于 2012-09-12T21:49:34.310 に答える
0

mercurial-serverのようなものを使用している場合、非推奨のリポジトリへのすべての書き込みアクセスを取り消すだけで、許可される操作はプルまたは更新のみになります。

于 2012-09-07T14:11:11.640 に答える