2010-12-06 16 views
4

私たちのアプリでは、ユーザーはツールバーを使ってページ間を移動でき、ページ1がデフォルトで表示されます。私はページ3aを変更していますが、これはツールバーの2つのクリックからしかアクセスできません。これはデバッグ中にするのは面倒ですので、main.cppではデフォルトをページ3aに設定しましたが、確かにこれをチェックしたくありません。しかし、Mercurialはmain.cppがコース)、これはマージのようなものに干渉します。水銀中のファイルに「このファイルをコミットしない」とマークすることはできますか?

私は、Mercurial内の特別なリストにmain.cppを移動したいと考えています。これは、基本的には「はい、このファイルは変更されていますが、心配しないでください」ということです。 main.cppが元の状態に戻ってくるので、Shelf拡張子は私が望むものではないことに注意してください。私はまた、ファイルを「忘れる」ことを望まない。誰にもこれに対する解決策がありますか?

(改造:もっと簡潔にするためにこの質問を編集して自由に感じる)

+0

ここに関連する質問があります。 Ry4anの答えはあなたのために働くかもしれないようです:http://stackoverflow.com/questions/2376082/excluding-project-configuration-files-from-commits-in-mercurial/2376282#2376282 –

答えて

1

これが短ければ、ちょっとした情報を追加しているので、私はpyfuncの答えにコメントを追加しています。

は明らかに、二つの問題があります。

は除外コミットの提案に追加するにはMAIN.CPPする変更を失うことなく

  • を引っ張る許可mai​​n.cppに
  • をコミットせずにコミット許可しますfor(1)の場合、TortoiseHgを使用することができれば、defaultsセクションの欠点がなく、この特定のプロジェクトでエイリアスを使用する必要があるかどうかを覚える必要はありません。私の経験については hereで読むことができます。

    (2)の回答はありません。 shelveはいくつかのステップを必要としますが、Mercurialはローカルの変更を引き出すことができないため、いくつかの作業を行う必要があります。私はTortoiseがコミットダイアログとの良い統合を提供して以来、mqをお勧めしますが、実際には1ファイル変更のケースではそれほど単純ではありません。

    でも、shelveやmqを使用するのは難しくありませんので、あまり心配しません。

    +0

    TortoiseHgのコミット除外リストはちょっと役立ち、私はそれについて知らなかったので、私は受け入れられた答えを切り替えました。ありがとう。 – moswald

    0

    クリスはコメントで指摘したように、これを行うために迅速かつ汚い方法は、私は別の質問で提案されているメカニズムを使用しています。

    [hooks] 
    pretxncommit.nomain = sh -c "! hg log -r tip --template '{files}' | grep -q /main.cpp" 
    

    あなたはまだあなたのコミットの行にmain.cppには含めない覚えておく必要がありますが、忘れたときにコミットすることを拒否しますコミット:それを行うには良い方法は、そのファイルを含むコミットを防ぐcommitフックです。

    1

    すでにMercurialによって追跡されているファイルを無視できる拡張機能はありません。

    これまでどんなアプローチが可能ですか。 Ry4anとして

    ファイルを含めるブロックコミット、を提案し、その後別のエレガントなアプローチがファイルをコミット中のファイルの特定の種類を無視してコミットする方法を伝えることです明示的な

    hg commit file1, file2, ... 
    

    を行います。

    私はこのアプローチがより好きです。

    hg commit --help 
    ....... 
    -X --exclude PATTERN [+] exclude names matching the given patterns 
    

    例:

    say I have two files a.py, b.py in my repo. I have changed them both. 
    hgt $ hg status 
    M a.py 
    M b.py 
    hgt $ hg commit -X a.py -m "Added new line to b.py" 
    hgt $ hg status 
    M a.py 
    
    +0

    残念ながら、これは私にまだ残っています(最も重要なのは、マージ)いくつかのコマンドをブロックします。しかし、あなたが言うように、私はこれが可能だとは思わない。私はちょうど棚のジャグリングを通してそれを手動で処理します。 – moswald

    1

    これは実際にはかなり一般的な使用パターンです。ただ1つのファイルの場合は、-Xオプションか、必要に応じてシェルビングとアンシェリングのどちらかを行うのが最も簡単な方法ですが、通常DVCSの場合のように、より一般的な解決策は別のブランチを作成することです。その例(bzrについては原則が適用されます)はhereです。

    基本的には、上流ブランチを反映するパブリックブランチから始めます。そこから、 "local changes"ブランチを分岐します。ここでmain.cppを変更します。その「ローカル変更」ブランチから、フィーチャーブランチを作成します。フィーチャーブランチは、通常の日常業務を行い、通常どおりにコミットします。

    変更を共有する準備ができたら、チェリーを最初のブランチに戻して、main.cppをローカルで変更せずに行った変更を取得します。このメソッドを使用すると、ローカルデバッグハックをチェックインしなくても、main.cppにパブリックな修正を加えることさえできます。プッシュとマージの複雑さは、アップストリームとローカルの変更の分岐を最初に通過する必要があるためですチェリーピックをきれいに保つ。

    +0

    私はチェリーピッキングがどのように機能するかについて興味があります。 –

    +0

    基本的には、通常のマージを行うと、ローカルの変更ブランチが引き込まれます。これは不要です。後で分岐したポイントからチェリーピックを実行すると、フィーチャーブランチ内のパッチのみがマージされます。 –

    関連する問題