2

簡単に:

hg cloneは、/。hg / hgrcにパス「デフォルト」を作成し、クローン元の場所に設定します。

Q:これを自動的に無効にすることは可能ですか?

詳細:

これはすでに部分的に答えられています。

デフォルトプッシュを防ぐことはできますが、プルは許可しますか?/.hg/hgrcなどのhgrcファイル、または(私の好み)〜/.hgrcでdefault-pushを設定する方法を確認します。

hgクローンはhgと同等ですか(init→pull) 」では、TimHeniganはhgclone=initと言います。引く; hg update default; /.hg/hgrcにデフォルトパスを設定します。

他の場所では、これは完全に真実ではないことがわかります。hg cloneは、たとえば、ハードリンク共有を行うという点で異なる場合があります。同等性の公式声明がない...

現在、default-pushを無効にすると非常に役立ちます。

しかし...私は「hgpushdefault」を行う習慣に陥っています。これは、目的をいくらか損なうものです。

ちなみに、私がこれを行っている理由は、デフォルトを無効にしたい場合です:マスター->ワークスペース->ステージング_エリア->マスターになるワークフロー。私はマスターの多くのクローンを作ります。/.hg/hgrcを変更して、クラインを実行するたびに[path]デフォルトを編集するのは面倒です。いずれかのワークスペースで「hgpush」または「hgpushdefault」を実行すると、問題が発生する可能性があります。代わりに、ステージング領域にプッシュする必要があります。ステージング領域からのみ広告をマスターにプッシュできます。

(master <-> staging_area <->ワークスペースを試しました。つまり、常にsdtaging領域からクローンを作成しました。しかし、これは混乱を招きます。さらに、まだ言っていない部分です。私のプロジェクトでは、履歴を削除または折りたたむことができます。混乱とエラーが発生しやすいレベルが追加されます。)

4

1 に答える 1

0

これが私が思いついたクローン後のフックです:

 [hooks]
 post-clone = perl ~/bin/delete-default-from-.hgrc "$HG_PATS"

そしてperlスクリプトは以下の通りです。

ワンライナーを探したいのですが。

#!/usr/local/bin/perl
use strict;

print "editing <repo>/.hg/hgrc to to remove [paths] / default";

# Hand tested
# cd ~/mips/uarch-perf-sim/psim+stuff/f; rm -rf k; hg clone ../m k
# cd ~/mips/uarch-perf-sim/psim+stuff/f; rm -rf k; hg clone ../m

my $debug = 0;


my $hg_pats = $ARGV[0];
die "Usage: delete-default-from-.hgrc HG_PATS (from post-clone hook)\n" if !exists $ARGV[0] || exists $ARGV[2];


# expect HG_PATS from post-clone hook

#['../m']
#['../m', 'target']"
#['../m', '../target']"

my $from;
my $target;

if( $hg_pats =~ m/^\['([^']+)'\]$/ ) {
    $from = $1;
    $target = $from;
    # delete paths if target implicit
    $target =~ s{.*/}{};
    print "from-only: $target\n" if $debug;
} elsif( $hg_pats =~ m/^\['([^']+)',\s+'([^']+)'\]$/ ) {
    $from = $1;
    $target = $2;
    # do NOT delete paths if target explicit
    print "from to: $target\n" if $debug;
} else {
    die "expected HG_PATS, got: $hg_pats\n";
}

die "clone target not found: $target\n" if ! -d $target;

my $hgrc = "$target/.hg/hgrc";
die "clone target/.hg/hgrc not found: $hgrc\n" if ! -r "$hgrc";

open( my $in, "<$hgrc" ) || die "could not open $hgrc to read (edit)\n";
unlink "$hgrc.tmp";
open( my $out, ">$hgrc.tmp" ) || die "could not open $hgrc.tmp to write\n";

my $section = '';
my $paths_found;
my $paths_default_found;
while( my $line = <$in> ) {
    chomp($line);
    print "line = $line\n" if $debug;

    if( $line =~ m/^\[paths\]/ ) {
    $section = "[paths]";
        $paths_found++;
    }
    elsif( $line =~ m/^\[/ ) {
    $section = $line;
    }
    elsif( ($section eq "[paths]") and ($line =~ m/^\s*default\s*=/) ) {
    $line =~ s/default/default-cloned-from/;
        $paths_default_found++;
    }
    print $out $line."\n";
}

die "[paths] section not found in $hgrc" if ! $paths_found;
die "[paths] / default not found in $hgrc" if ! $paths_default_found;

system("echo '<diff edited $hgrc>';diff -U10 $hgrc $hgrc.tmp; echo '</diff>'");


unlink "$hgrc.orig";
die "could not unlink older $hgrc.orig" if -e "$hgrc.orig";

rename "$hgrc","$hgrc.orig" || die "could not rename $hgrc to $hgrc.orig";

rename "$hgrc.tmp","$hgrc" || die "could not rename $hgrc.tmp to $hgrc";

system("echo '$hgrc:';cat $hgrc");

exit(0);
于 2012-06-23T22:56:58.390 に答える