小编Pod*_*Pod的帖子

如何管理与git子模块的冲突?

我有一个引用多个子模块的git超级项目,我试图锁定其他项目成员的工作流程.

对于这个问题,让我说我的超级项目被调用supery并且子模块被调用subby.(然后是我正在尝试做的简化......我实际上并没有使用分支版本,但我认为最简单的问题是布局.)

我的主分支supery具有作为子模块引用v1.0的git项目的subby标记.的分支superyone.one,改变了子模块的引用指向该标记v1.1subby.

我可以毫不费力地在每个分支中工作,但如果我尝试使用one.one分支更改来更新分支,master我会收到一些冲突,而我不知道如何解决它们.

基本上在分支中运行一段git pull . master时间之后subby,看起来它会创建其他子模块.

在拉/合并之前,我git submoduleone.one分支获得了所需的响应:

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Run Code Online (Sandbox Code Playgroud)

但是在拉动之后,它会在我运行时添加额外的子模块git submodule:

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e …
Run Code Online (Sandbox Code Playgroud)

git branch conflict git-submodules

108
推荐指数
7
解决办法
8万
查看次数

通过ReentrantLock访问的字段是否需要volatile关键字?

我的问题是指使用ReentrantLock是否保证字段的可见性与synchronized关键字提供的方面相同.

例如,在下面的类A中,当使用synchronized关键字时,字段sharedData不需要声明为volatile.

class A 
{
  private double sharedData;

  public synchronized void method() 
  {
    double temp = sharedData;
    temp *= 2.5;
    sharedData = temp + 1;
  } 
}
Run Code Online (Sandbox Code Playgroud)

但是对于使用ReentrantLock的下一个示例,是否必须在该字段上使用volatile关键字?

class B 
{
  private final ReentrantLock lock = new ReentrantLock();
  private volatile double sharedData;

  public void method() 
  {
    lock.lock();
    try
    {
      double temp = sharedData;
      temp *= 2.5;
      sharedData = temp + 1;
    }
    finally
    {
      lock.unlock();
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

我知道无论如何使用volatile关键字只会造成极小的性能损失,但我仍然希望正确编码.

java concurrency locking volatile reentrancy

28
推荐指数
1
解决办法
2518
查看次数

如何组织包含多个包的python项目,以便包中的每个文件仍然可以单独运行?

TL; DR

这是一个示例存储库,如第一个图(下面)中所述设置:https://github.com/Poddster/package_problems

如果你可以在项目组织方面让它看起来像第二个图,并且仍然可以运行以下命令,那么你已经回答了这个问题:

$ git clone https://github.com/Poddster/package_problems.git
$ cd package_problems
<do your magic here>

$ nosetests

$ ./my_tool/my_tool.py
$ ./my_tool/t.py
$ ./my_tool/d.py

 (or for the above commands, $ cd ./my_tool/ && ./my_tool.py is also acceptable)
Run Code Online (Sandbox Code Playgroud)

或者:给我一个不同的项目结构,允许我将相关文件('包')组合在一起,单独运行所有文件,将文件导入同一包中的其他文件,并将包/文件导入其他包的文件.


现在的情况

我有一堆python文件.当从命令行调用时,它们中的大多数都是有用的,即它们都使用argparse并if __name__ == "__main__"执行有用的操作.

目前我有这个目录结构,一切正常:

.
??? config.txt
??? docs/
?   ??? ...
??? my_tool.py
??? a.py
??? b.py
??? c.py
??? d.py
??? e.py
??? README.md
??? tests
?   ??? __init__.py
?   ??? a.py
?   ??? …
Run Code Online (Sandbox Code Playgroud)

python import packages pycharm python-2.7

28
推荐指数
1
解决办法
5856
查看次数

如何为Ack提供我想要搜索的目录?

我想使用linux命令行工具,ack但有一件事阻止我使用它,这是我无法弄清楚如何告诉它从哪里开始搜索.我想开始用我的复杂find/ xargs/ grep命令替换,ack但如果我不知道从哪里开始搜索我就不能使用它.

例如,我在一个目录中运行模拟,但我想告诉ack从其他地方搜索代码库而无需更改到该目录进行调用ack.

linux command-line-interface

27
推荐指数
1
解决办法
5537
查看次数

使用mockito操纵参数的存根方法

我有以下情况:

class Worker {  
  public Integer somework() {  
      Integer k=0;  
      Helper h= new Helper();  
      h.change(k);  
      return k;  
    }
}

class Helper {
  public void change(Integer k) {
    //k = Some calcs
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在制作unitests Worker,显然我想要模拟Helper类,以便他的change方法总是将1放入k.

我的实际情况比较复杂,但这段代码代表了问题.感谢帮助.

java methods unit-testing void mockito

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

用于构建"调试"和"发布"JAR文件的Idiomatic Gradle脚本

我正在尝试创建一个Gradle构建脚本,该脚本将.jar在"发布"或"调试"模式下构建Java 文件,并且在参数化脚本时遇到问题.

问题是:使用Java插件在Gradle脚本中执行此操作的惯用方法什么? (或者,如果没有惯用的方法,什么是真正有用的hacky解决方案?)

我不介意参数化的方法,只要命令行和IDE调用可以轻松地在两个输出选项之间进行选择.jar文件将在其他项目中用作库,例如Android应用程序和JavaFX应用程序,因此我希望参数化方法可以从他们自己的Gradle脚本调用/依赖.

理想情况下,我想'模仿'Android gradle插件具有每个任务的调试/发布版本的能力,即

$ ./gradlew build    
$ ./gradlew assembleRelease
$ ./gradlew checkDebug
Run Code Online (Sandbox Code Playgroud)

但即使是顶级buildDebug和buildRelease也不合适.


我试过的东西

本节与该问题无关.

初始点

我有以下gradle文件/项目:

group 'TestGradleProjectGroup'
apply plugin: 'java'
sourceCompatibility = 1.8

version '1.0-release'
compileJava {
    options.debug = false
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,并生成jar文件:

$ ls TestGradleModule/build/libs/
TestGradleModule-1.0-release.jar
Run Code Online (Sandbox Code Playgroud)

当检查提取的类时javap,它不包含任何调试信息.欢呼.不,我们需要一种方法来制作调试版本.

添加调试和发布任务

version '1.0-release'
compileJava {
    options.debug = false
}

task buildRelease(type: GradleBuild, dependsOn: build) {
    project.version …
Run Code Online (Sandbox Code Playgroud)

java jar release-management gradle

8
推荐指数
2
解决办法
3482
查看次数

C 标准库中的任何函数是否隐式使用了 `stderr`?

C 规范要求所有 C 程序都有 3 个开放的流可供它们使用:stdout, stdin, stderr.

用户可以根据需要使用这些流,例如:

fprintf(stdout, "lol");
fputs("oops", stderr);
fgets(buffer, 20, stdin);
Run Code Online (Sandbox Code Playgroud)

C 标准库中的一些函数隐式使用这些,例如:

printf("lol");           /* implicitly uses stdout */
puts("rofl");            /* implicitly uses stdout */
int c = getchar(buffer); /* implicitly uses stdin  */
Run Code Online (Sandbox Code Playgroud)
  1. C 标准库中的任何函数是否隐式使用stderr
  2. C 标准库(例如 Linux 上的 GNU 的 glibc)的常见实现中的任何函数是否隐式使用stderr

c glibc libc stderr c-standard-library

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

Android Studio 库未构建发布 aar,仅进行调试

我在 Android Studio 中有一个项目,其中包含三个库。我正在构建一组在许多其他项目中使用的通用库。除了构建过程之外,一切都运行良好。

我有三个库模块:toolsdatabasecore

如果我将构建变体设置为调试,我会在 build/outputs/aar 文件夹中获取正确的文件:

tools-debug.aar
database-debug.aar
core-debug.aar
Run Code Online (Sandbox Code Playgroud)

然而,当我将构建变体设置为发布时,我只得到

tools-release.aar
database-release.aar
Run Code Online (Sandbox Code Playgroud)

没有core-release.aar

生成它的唯一方法是打开右侧的 Gradle 滑块,然后手动运行 assembleRelease。

我比较了所有 gradle 文件和我能找到的所有其他文件,它们在三个库之间都是相同的。任何想法,将不胜感激

release gradle android-studio android-gradle-plugin

5
推荐指数
0
解决办法
2443
查看次数

字符串,字符串构建器,字符数组和Arraylist之间的区别

字符串是不可变的.Stringbuilders不是,所以你可以在最后添加字符.字符串是字符数组,如果我没有错,比为什么我们单独使用字符数组和字符串分开,我们真的需要使用字符数组吗?

其次,有字符数组,然后有Arraylists.数组列表包含完整的对象?实际上我有点困惑.

String cat = "c" + "a" + "t";
cat = cat + cat;

StringBuilder sb = new StringBuilder();
sb.append(city);
sb.append(", ");
sb.append(state);
sb.toString();

Char apple[5]={'a','p','p','l','e'};

Arraylist<MyCar>obj = new Arraylist<MyCar>();
Run Code Online (Sandbox Code Playgroud)

哪个应该用在哪里?

java arrays string arraylist

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

使用VI去除结肠

我正在尝试在VI中进行查找和替换以删除时间戳.我通常在VI中使用S命令执行此操作但是如何告诉VI我需要删除冒号,当它的部分结构为VI命令本身时

EX:"xxxxx xxxxx 24:00:00 CDT"

试着

s:24:00:00 CDT::g

s:"24:00:00 CDT"::g

s:/:::g

任何帮助表示赞赏.

regex vi delimiter

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

演员和命名空间操作符之间没有空格?

任何人都可以解释以下代码行,可在http://docs.openttd.org/ai__cargo_8cpp_source.html找到

return (AICargo::TownEffect)::CargoSpec::Get(cargo_type)->town_effect;
Run Code Online (Sandbox Code Playgroud)

如果这条线是:

return (AICargo::TownEffect) ::CargoSpec::Get(cargo_type)->town_effect;
Run Code Online (Sandbox Code Playgroud)

(注意之间的空间TownEffect)::),那么我会罚款的理解.但是该文档*中没有空格,这意味着(AICargo::TownEffect)是::运算符的左操作数.

这段代码如何工作/编译?或者由于一些模糊的C++规则,这两件事情是否相等?

*在cpp文件中也是如此.

c++ namespaces

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

如何将多个合并压缩为一个合并?

我有一个看起来像这样的主题分支。(分支主题当前指向'a0a0')

  • a0a0 将分支“Master”合并到主题中
  • b1b1 将分支“Master”合并到主题中
  • c2c2 合并提交“来自主人的东西”到主题中
  • d3d3 将分支“Master”合并到主题中
  • e4e4 将分支“Master”合并到主题中
  • f5f5 将分支“Master”合并到主题中
  • 6666 实际提交
  • [主题分支的大量历史记录]
  • 9999 原始发散点

如何将 a0-f5 变成单个合并提交?

我试过:git rebase -i f5f5打算将它告诉那squash5 个提交,但它只是在 f5f5 和 a0a0 之间的主分支上提供了每个提交。因此,我将除第一个和最后一个之外的所有内容从pick变为squash,但是这太疯狂了,并且将 master 的每个提交重新定位为一个巨大的提交,以代替所有合并,从而失去了它是“合并”的事实。那不是我所期望的!

我可以:

  $ git reset 6666
  $ git merge Master
Run Code Online (Sandbox Code Playgroud)

但这需要我重新做任何合并提交。

那么我如何将这些不同的合并压缩成一个合并提交,知道这是一个合并,并且还保留所有合并冲突的东西?

git merge rebase

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

内联浮动到uint"表示"不起作用?

这是在C中,但我标记它是C++,因为它是相同的.这是用以下内容构建的:Microsoft(R)32位C/C++优化编译器版本14.00.50727.220适用于80x86,如果这有任何不同

为什么这样做?

(inVal是0x80)

float flt = (float) inVal;
outVal = *((unsigned long*)&flt);
Run Code Online (Sandbox Code Playgroud)

(结果outVal为0x43000000 - 正确)

但这不是吗?

outVal = *((unsigned long*)&((float)inVal));
Run Code Online (Sandbox Code Playgroud)

(结果outVal为0x00000080 - NOT CORRECT :()

在问这个问题之前,我用Google搜索了一下,在java中发现了这个函数基本上可以做我想要的.如果你对我正在尝试做的事情感到有点困惑,这个程序可能有助于解释它:

class hello
{
    public static void main(String[] args)
    {
        int inside = Float.floatToIntBits(128.0f);
        System.out.printf("0x%08X", inside);
    }
}
Run Code Online (Sandbox Code Playgroud)

c c++

0
推荐指数
1
解决办法
569
查看次数