小编bit*_*ack的帖子

如何在没有合并的情况下在Git中执行三向差异?

我想在具有公共合并基础的两个git分支之间执行三向差异,并使用kdiff3查看它.

我发现很多指导对SO(和一些非常相似的问题(1,2,3)),但我还没有找到一个直接的答案.值得注意的是,对这个答案的评论意味着我想要的是可能的,但它对我不起作用.希望用户可以在这里ch :) :)

对于背景,当我执行合并时,我使用"diff3"冲突样式:

git config --global merge.conflictstyle diff3

我已git mergetool配置为使用kdiff3.

解决合并冲突时,这会显示四个文件:

  1. 当前分支的文件($ LOCAL)
  2. 另一个分支的文件($ REMOTE)
  3. 该文件是两个分支的共同祖先($ BASE)
  4. 合并的输出文件($ MERGED)

但是,git difftool只会拉起两个分支提示.我也希望看到基本文件. 为了清楚起见,我希望能够合并之前执行此差异,包括没有合并冲突的文件.(git mergetool如果存在冲突,则仅显示三向差异).


部分解决方案#1:

使用单个文件,我可以导出三个版本并手动调用diff:

git show local_branch:filename > localfile
git show remote_branch:filename > remotefile
git show `git merge-base local_branch remote_branch`:filename > basefile

{kdiff3_path}/kdiff3.exe --L1 "Base" --L2 "Local" --L3 "Remote" -o "outputfile" basefile localfile remotefile &
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  1. 我希望它适用于整个项目,而不仅仅是一个特定的文件.
  2. 这太丑了!我可以编写脚本,但我希望使用标准的git进程有一个更清晰的方法. …

git version-control diff merge

23
推荐指数
1
解决办法
4578
查看次数

使用类型转换删除gcc编译器警告

我正在使用gcc 4.9进行嵌入式ARM编程.我一直在使用-Wconversion交换机,因为它是我公司的默认开发工具配置.我正在使用stdint.h 类型(uint8_t,uint32_t等).

每次执行复合赋值或简单添加时,编译器都会创建警告.例如:

uint8_t u8 = 0;
uint16_t u16;

// These cause warnings:
u8 += 2;
u8 = u16 >> 8;
Run Code Online (Sandbox Code Playgroud)

修复此问题的"常用方法"是使用强制转换,如此此处所述:

u8 = (uint8_t)(u8 + 2);
u8 = (uint8_t)(u16 >> 8);
Run Code Online (Sandbox Code Playgroud)

除了这个丑陋之外,我还在不断地说服铸造通常是不好的做法.

我的问题:

  1. 为什么以这种方式使用类型转换是不好的?
  2. 通过简单地省略-Wconversion并让编译器为我进行隐式转换,我会失去什么吗?

c casting type-conversion compiler-warnings implicit-conversion

9
推荐指数
1
解决办法
894
查看次数

如何在tkinter中使用<ComboboxSelected>虚拟事件

我在Python 3.5.2中使用了一个tkk.Combobox主题小部件.我希望在选择值时执行操作.

在Python 文档中,它说:

<<ComboboxSelected>>当用户从值列表中选择元素时,组合框小部件生成虚拟事件.

这里的堆栈,有一些答案(的1,2,等等),显示如何绑定事件:

cbox.bind("<<ComboboxSelected>>", function)
Run Code Online (Sandbox Code Playgroud)

但是,我无法使其发挥作用.这是一个非常简单的例子,展示了我的无效功能:

import tkinter as tk
from tkinter import ttk

tkwindow = tk.Tk()

cbox = ttk.Combobox(tkwindow, values=[1,2,3], state='readonly')
cbox.grid(column=0, row=0)

cbox.bind("<<ComboboxSelected>>", print("Selected!"))

tkwindow.mainloop()
Run Code Online (Sandbox Code Playgroud)

我得到一个"被选中"的例子.当我运行此代码时,即使没有点击任何内容.但是当我在组合框中选择一些东西时没有任何反应.

我在Windows 7中使用IDLE,以防它有所作为.

我错过了什么?

python combobox tkinter python-3.x

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

为什么我不能将指针作为参数传递?

我试图通过c中的函数检索指针.如果指针是函数的返回值,则它可以工作.但是如果我将指针的地址传递给函数,我就无法从函数内更新解除引用的指针值(应该是存储在指针中的地址).

请参阅代码和输出.为什么我没有拿到既相同的结果GetPointer1()GetPointer2()?我错过了什么?

#include <stdio.h>
#include <stdint.h>

uint8_t SrcArray[2][3] = {{11,12,13},{21,22,23}};
uint8_t *p1;
uint8_t *p2;

void GetPointer1(uint8_t *p);
uint8_t* GetPointer2(void);

int main()
{
    printf ("&SrcArray[0][0]: %d\n", &SrcArray[0][0]);

    GetPointer1(p1);
    p2 = GetPointer2();

    printf ("p1: %d\n",p1);
    printf ("p2: %d\n",p2);

    return 0;
}

void GetPointer1(uint8_t *p)
{
    p = &SrcArray[0][0];
}

uint8_t* GetPointer2(void)
{
    return &SrcArray[0][0];
}
Run Code Online (Sandbox Code Playgroud)

输出:

&SrcArray[0][0]: 6295604
p1: 0
p2: 6295604
Run Code Online (Sandbox Code Playgroud)

c pointers function multidimensional-array

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

字符串值; 词典引用?

我来自C,学习Python.在Python(3.5.2)中,似乎将一种数据类型分配给同一类型的另一种数据类型有时通过值来完成,有时通过引用来完成.

例如,字符串按值分配:

>>> str1 = "hello"
>>> str2 = str1
>>> print(str1, str2)
hello hello
>>> str2 = "goodbye"
>>> print(str1, str2)
hello goodbye
Run Code Online (Sandbox Code Playgroud)

这是我期望的行为.但是,它与字典的工作方式不同:

>>> dict1 = {'key1':'val1', 'key2':'val2'}
>>> dict2 = dict1
>>> print(dict1, dict2)
{'key2': 'val2', 'key1': 'val1'} {'key2': 'val2', 'key1': 'val1'}
>>> dict2['key1'] = 'newval'
>>> print(dict1, dict2)
{'key2': 'val2', 'key1': 'newval'} {'key2': 'val2', 'key1': 'newval'}
Run Code Online (Sandbox Code Playgroud)

请注意,两个dict1 dict2发生了变化.同样,如果我将键/值对添加到其中一个词典中,它将同时出现在两个词典中.哎呀!

(对不起,这是我的C-background讲话):)

我如何知道任何给定变量类型的行为?有这种疯狂的方法还是我只需要记住任意规则?

PS我意识到我可以通过使用获得我预期的行为dict2 = dict(dict1).


在"可能重复"包含良好的信息如何做到这一点,但我感兴趣的是,为什么我不得不这样做.这个问题的答案已经非常有用了!

python dictionary python-3.x

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