3

Mercurial を初めて使用するので、チームのプロジェクトの状況でブランチを設定する場所について、経験豊富なアドバイスを求めたいと思います。このプロジェクトは、他の 4 人のメンバーによって共有されます。

ローカル マシンのディレクトリ /home/Cassie/localRepository/src1 にリポジトリがあります。私のマシンには /home/Cassie/localRepository/src2 という別のディレクトリがあり、ほとんどの一般的なファイルを src1 ディレクトリとして保持していますが、いくつかの異なるファイルもあります。たとえば、/home/Cassie/localRepository/src1 には、

file1 file2 file3 file4 file5

/home/Cassie/localRepository/src2 には、

file1 file2 file3 file4(version2) file5(version 2)

それらを2つの異なるブランチにして、別々に作業したいと思います。ただし、私はまだ file1、file2、および fil3 の作業を続けており、これらのブランチの両方が files1 files2 files3 と一緒に更新されることを願っています。src1 ディレクトリの file4 と file5 の両方が、src2 ディレクトリのものと同じ名前を共有していることに注意してください。すべてのファイルを同じディレクトリに移動すると、どのバージョンとどのバージョンを区別する方法がなくなります。そのため、あるバージョンの file4 と file5 を src1 ディレクトリに保存し、別のバージョンの file4 と file5 を scr2 ディレクトリに保存しました。私は bitbucket にチーム アカウントを持っており、src1 ディレクトリをアカウントにプッシュしました。したがって、bitbucket には中央リポジトリとして src1 にすべてのファイルがあります。今、私はsrc2のブランチをどこにセットアップして目標を達成するかという問題を抱えています。

ところで、私のローカル マシンは Linux RedHat ワークステーション 6.2 で、mercurial 1.7 と tortoisehg 1.5 があります。

私はいくつかの実験を試みました:

(1) 別のディレクトリ src をローカル リポジトリとして作成しました。file1,2,3 をコピーし、追加してコミットしました。

(2) 次に、file4 を src1 ディレクトリから src にコピーして src1-Branch というブランチにし、コピーして file4.txt を src1-branch に追加し、コミットしました。

(3) src2-branch という別のブランチを作成し、src2-branch に切り替えました。

hg update src2-branch

,file4(version2) を src2 ディレクトリから現在のディレクトリにコピーしました

 cp ../src2/file4.txt .

、file4を追加し、file4.txtをコミットしようとしました。ただし、次のようなエラーメッセージが表示されました

waiting for lock on working directory of /home/Cassie/src held by 'Cassie-PC:20994'

次に、オンラインでグーグル検索したところ、.hg/wlock を削除するよう提案されました。出来た !

そもそもなぜ問題が発生したのか誰でも知っていますか? file4.txt を src2 から src2-branch に追加したときに何か問題がありましたか? ありがとう

4

1 に答える 1

1

Mercurial ブランチを使用して、目的を達成できると思います。ファイルへの変更をブランチ間で別々に保持し、必要に応じてそれらの変更を他のブランチにマージできます。src1 リポジトリで、src2 ブランチを作成します。

 > hg branch src2

次に、ファイル 4 と 5 を削除し、ファイル 6 と 7 を追加します。

> hg remove file4 file5
> cp ..\src2\file6 .
> cp ..\src2\file7 .
> hg add file6 file7
> hg commit -m "Removing file4 and file5; adding file6 and file7."

次に、Mercurial のマージ コマンドを使用して、あるブランチから別のブランチに変更を取り込みます。元の質問から、デフォルト (src1) ブランチから src2 ブランチに変更を加えたいようです。その場合、次のようにします。

> hg up src2
> hg merge default
> hg commit -m "Merging default -> src2"

マージは、マージされていないすべての変更をソース ブランチから宛先ブランチに取り込みます。いくつかの変更だけを加えたい場合は、Mercurial 2.0 以降を使用している場合は移植コマンドを使用し、それ以前のバージョンを使用している場合は移植拡張機能を使用します。

于 2012-06-09T22:40:43.263 に答える