小编dev*_*oid的帖子

Git:恢复失败的提交消息

时不时地,因为我尽职尽责地制作了一个很好的描述性提交消息,我收到一个错误:

".git/COMMIT_EDITMSG" 81L, 2108C written
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.
Run Code Online (Sandbox Code Playgroud)

注意这通常是在之后:wq.我检查.git/COMMIT_EDITMSG文件,它没有任何变化.是否有另一个地方git保存此消息,以便我可以恢复它并尝试再次提交?人们有这个问题的经验,知道为什么它会发生在我身上吗?我没有问题写入其他文件和权限似乎是有序的.

git vim

17
推荐指数
2
解决办法
2842
查看次数

如何在Windows GUI中进行rebase --interactive

我有一个与Windows的git GUI界面结合的同事; 我想让他以交互方式进行调整,以便他可以压缩提交.

我已经尝试使用Tools->Add添加,git rebase --interactive但这只是在他尝试时挂起.客户端可以处理交互式rebase吗?还有另一个Windows的GUI客户端可以吗?或许还有另一种方法来压制客户端的提交?

windows git version-control git-rebase git-gui

10
推荐指数
1
解决办法
3129
查看次数

is_deeply测试忽略数组顺序?

我正在寻找像is_deeply中的测试程序Test::More.有cmp_bag来自Test::Deep但这只能在数组本身上运行,而不是我传入的可怕的大数据哈希数据结构.是否有类似的东西:

is_deeply $got, $expected, {
    array => cmp_bag,
    # and other configuration...
}, "Ugly data structure should be the same, barring array order.";
Run Code Online (Sandbox Code Playgroud)

澄清

我可以递归地钻研我的$expected和$got对象并将数组转换为bag对象:

sub bagIt {
    my $obj = shift;
    switch (ref($obj)) {
        case "ARRAY"    {
            return bag([
                map { $_ = bagIt($_) }
                @$obj
            ]);
        } case "HASH"   {
            return {
                map { $_ => bagIt( $obj->{$_} ) }
                keys %$obj
            };
        } else { …
Run Code Online (Sandbox Code Playgroud)

perl unit-testing

6
推荐指数
1
解决办法
2151
查看次数

懒惰的属性强制

使用Moose,您可以拥有lazy builders属性,如果尚未填充属性,则在首次访问属性时调用构建器.您可以使用属性的类型强制coerce,但只要设置了属性,就会应用此属性,因此即使在对象初始化时也是如此.

我正在寻找一种实现延迟强制的方法,其中一个属性可能最初被填充,但只有在首次访问时才被强制执行.当胁迫很昂贵时,这很重要.

在下面的示例中,我使用union类型和方法修饰符来执行此操作:

package My::Foo;
use Moose;
has x => (
    is => 'rw',
    isa => 'ArrayRef | Int',
    required => 1
);

around "x" => sub {
    my $orig = shift;
    my $self = shift;
    my $val = $self->$orig(@_);
    unless(ref($val)) {
        # Do the cocerion
        $val = [ map { 1 } 1..$val ];
        sleep(1); # in my case this is expensive …
Run Code Online (Sandbox Code Playgroud)

perl moose lazy-evaluation

5
推荐指数
1
解决办法
379
查看次数

git filter-branch仅更改受影响的提交

一个大的二进制文件被添加到我的git存储库20提交之前.删除它:

git filter-branch --index-filter "git rm --cached --ignore-unmatch FILE" \
    --prune-empty HEAD
Run Code Online (Sandbox Code Playgroud)

在我的项目历史记录中为每次提交(~1100)更改SHA1.它确实删除了文件,但我希望只有git push -f少量的修改提交.有没有办法告诉filter-branch只修改提交FILE和后代评论,在我的情况下约20次提交?

git git-filter-branch

3
推荐指数
1
解决办法
924
查看次数