附图:
hg clone在/.hg/hgrc中创建路径“default”,设置为从中克隆的位置。
问:是否可以自动禁用此功能?
DETAIL:
这已经部分回答了。
在Can you prevent default-push, but allow pull?中我们看到如何设置default-push,在某些hgrc文件中,例如/.hg/hgrc,或者(我的偏好),在〜/ .hgrc中
在Is hg clone equivalent to hg (init→pull) 蒂姆亨尼根说hg clone = init;拉; hg update default;在/.hg/hgrc中设置默认路径。
虽然在其他地方我们看到这不是真的。 hg克隆可能不同,例如,它进行硬链接共享。缺乏正式的等同声明......
现在,禁用default-push会有很大帮助。
但是......我已经养成了“hg push default”的习惯。这有点违反了p; urpose。
顺便说一句:原因我这样做,想要禁用默认设置:工作流程是主要的 - > workspace-> staging_area-> master。我做了很多主人的克隆。每次进行cline时修改/.hg/hgrc以编辑[path]默认值都很痛苦。在任何工作空间中执行“hg push”或“hg push default”都可能很糟糕。相反,我需要推送到临时区域,广告只能从我可以推送给主人的暂存区域进行。
(我已经尝试了主< - > staging_area< - >工作区,即总是从sdtaging区域克隆。但我发现这令人困惑。另外,我尚未说过的部分:我的项目让我删除或崩溃历史,这会增加额外的混乱程度和容易出错的错误。)
答案 0 :(得分: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);