小编red*_*bmk的帖子

使用`git show`创建和应用跨多个提交的补丁

最近我一直在使用git show <hash>创建差异供以后参考,因为它比键入更容易,git diff <hash>~ <hash>并且它显示了提交信息(时间戳,用户,哈希,注释).然后,您可以使用git apply <filename>该补丁.

我发现git show -3将显示最后三次提交以及相同的额外信息.但是,git apply将它作为非分段更改压缩到工作目录中,并丢失所有提交信息.

git中是否有适用所有信息的内容?传递一个标志而不是将补丁分成三个文件,分别应用它们,并创建新的提交,会简单得多.

git diff patch git-show

13
推荐指数
2
解决办法
1万
查看次数

具有排序行的矩阵的中位数

我无法以最佳方式解决以下问题,也无法找到在任何地方执行此操作的方法.

给定N×M矩阵,其中每行被排序,找到矩阵的整体中值.假设N*M是奇数.

例如,

矩阵=
[1,3,5]
[2,6,9]
[3,6,9]

A = [1,2,3,3,5,6,6,9,9]

中位数为5.因此,我们返回5.
注意:不允许额外的内存.

任何帮助将不胜感激.

algorithm matrix binary-search data-structures

13
推荐指数
1
解决办法
9152
查看次数

git push如何使用android的repo工具?

我习惯使用git单个存储库.但是,我最近一直在涉及Android开发,我正试图解决这个问题repo.我已经通过在.repo/local_manifests目录中创建xmls来设置一些自定义git repos (我正在使用repo 1.19)并且repo sync工作正常.

当我查看自定义git repos时,他们说# Not currently on any branch.这看起来就像我使用命令git checkout abcd1234(检查提交abcd1234)而不是git checkout origin/master.至于做出改变,我不知道如何回归原点.这是我正常的git工作流程.

git checkout origin/master
#make changes to working directory
git add .
git commit -m 'useful message'
#assume time has passed and there could be changes upstream
git fetch
git rebase origin/master
git push origin master
Run Code Online (Sandbox Code Playgroud)

既然我不再在技术上分支,我怎么能推动变化?我知道有一个工具,repo upload但我不确定它是如何工作的.我从未使用过Gerrit,但也许值得设置,以便其他团队成员可以在将代码推送到Github之前查看代码.老实说,我仍然有一个非常抽象的理解repoGerrit.

git android github repository gerrit

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

测量大型源树中的"亲密度"

作为我之前提出的关于找到两个源之间最佳匹配的问题的一部分,其中一个有一个活跃的git repo而另一个没有git历史,我编写了一个perl脚本来找到最接近的git commit.

我正在重写脚本,以便您不必猜测要使用哪个分支,但它会在所有分支中运行并找到最接近的匹配,然后告诉您最佳分支的最佳提交.不幸的是,我发现我正在使用的测量可能不是"亲近"的最佳判断.

目前,我diff -burN -x.git my_git_subtree my_src_subtree | wc -l用来确定代码树的接近程度.这似乎或多或少有效,但我遇到了添加或丢失整个文件夹的情况,这些文件可能存在或不存在于另一个分支中.

有没有更好的方法来确定来源的接近程度?我正在设想比较目录结构的东西,可能还有多少行不同.它可能只是传递不同的参数diff,或者可能还有另一种工具可以做到这样的事情.

git diff directory-structure

7
推荐指数
1
解决办法
137
查看次数

为什么这个同步语句示例不起作用?

使用同步,我基本上有两个执行相同对象的方法的cuncurrent线程,但可能我遇到了错误.

鉴于这段代码

public class Test {
    public static void main(String... args) throws InterruptedException{
        new Test();
    }

    Test() throws InterruptedException{

        Stuff s = new Stuff();

        Th t1 = new Th(1,s);
        Th t2 = new Th(2,s);

        t1.start();
        Thread.sleep(1000);
        t2.start();
    }
}

class Stuff{
    public Integer count=0;

    void doStuff(int threadId){
        System.out.println(threadId + ": in doStuff");
        synchronized (count) {
            count += 100;

            if (threadId == 1) {
                try {Thread.sleep(3000);} 
                catch (InterruptedException e) {e.printStackTrace();}
            }

            System.out.println(threadId + ": count = " + count);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

创建执行选项卡的vim映射(自动完成)

背景:

我有一个vim映射,可以帮助我轻松访问代码库中的其他目录.

cmap j1 `current_base`/path/to/section1/
cmap j2 `current_base`/other/path/
Run Code Online (Sandbox Code Playgroud)

current_base是一个bash脚本,它返回相对于当前文件的路径.(例如,如果我进去的/foo/bar/code/some/path话会回来/foo/bar/code.

现在,在vim我可以输入:e j1获得

:e `current_base`/path/to/section1/
Run Code Online (Sandbox Code Playgroud)

如果我按下tab键一次,它将执行current_base并替换我所拥有的

:e /foo/bar/code/path/to/section1/
Run Code Online (Sandbox Code Playgroud)

如果我然后tab再次按下该键,我会得到该文件夹​​中所有文件和目录的列表,因为我已经set wildmode=list:longest在我的vimrc中了.

我想让vim映射为我自动完成,所以我不必每次都按Tab键两次,但这样:

cmap j1 `current_base`/path/to/section1/<tab><tab>
Run Code Online (Sandbox Code Playgroud)

结果是:

`current_base`/path/to/section1/^I^I
Run Code Online (Sandbox Code Playgroud)

题:

如何将vim映射实际自动完成,就好像我按下了tab键,而不是插入^I

vim autocomplete

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