我有一个引用多个子模块的git超级项目,我试图锁定其他项目成员的工作流程.
对于这个问题,让我说我的超级项目被调用supery并且子模块被调用subby.(然后是我正在尝试做的简化......我实际上并没有使用分支版本,但我认为最简单的问题是布局.)
我的主分支supery具有作为子模块引用v1.0的git项目的subby标记.的分支supery叫one.one,改变了子模块的引用指向该标记v1.1的subby.
我可以毫不费力地在每个分支中工作,但如果我尝试使用one.one分支更改来更新分支,master我会收到一些冲突,而我不知道如何解决它们.
基本上在分支中运行一段git pull . master时间之后subby,看起来它会创建其他子模块.
在拉/合并之前,我git submodule从one.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) 我的问题是指使用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关键字只会造成极小的性能损失,但我仍然希望正确编码.
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) 我想使用linux命令行工具,ack但有一件事阻止我使用它,这是我无法弄清楚如何告诉它从哪里开始搜索.我想开始用我的复杂find/ xargs/ grep命令替换,ack但如果我不知道从哪里开始搜索我就不能使用它.
例如,我在一个目录中运行模拟,但我想告诉ack从其他地方搜索代码库而无需更改到该目录进行调用ack.
我有以下情况:
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.
我的实际情况比较复杂,但这段代码代表了问题.感谢帮助.
我正在尝试创建一个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) 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)
stderr?stderr?我在 Android Studio 中有一个项目,其中包含三个库。我正在构建一组在许多其他项目中使用的通用库。除了构建过程之外,一切都运行良好。
我有三个库模块:tools、database和core。
如果我将构建变体设置为调试,我会在 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 文件和我能找到的所有其他文件,它们在三个库之间都是相同的。任何想法,将不胜感激
字符串是不可变的.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)
哪个应该用在哪里?
我正在尝试在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
任何帮助表示赞赏.
任何人都可以解释以下代码行,可在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文件中也是如此.
我有一个看起来像这样的主题分支。(分支主题当前指向'a0a0')
如何将 a0-f5 变成单个合并提交?
我试过:git rebase -i f5f5打算将它告诉那squash5 个提交,但它只是在 f5f5 和 a0a0 之间的主分支上提供了每个提交。因此,我将除第一个和最后一个之外的所有内容从pick变为squash,但是这太疯狂了,并且将 master 的每个提交重新定位为一个巨大的提交,以代替所有合并,从而失去了它是“合并”的事实。那不是我所期望的!
我可以:
$ git reset 6666
$ git merge Master
Run Code Online (Sandbox Code Playgroud)
但这需要我重新做任何合并提交。
那么我如何将这些不同的合并压缩成一个合并提交,知道这是一个合并,并且还保留所有合并冲突的东西?
这是在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) java ×4
c ×2
c++ ×2
git ×2
gradle ×2
arraylist ×1
arrays ×1
branch ×1
concurrency ×1
conflict ×1
delimiter ×1
glibc ×1
import ×1
jar ×1
libc ×1
linux ×1
locking ×1
merge ×1
methods ×1
mockito ×1
namespaces ×1
packages ×1
pycharm ×1
python ×1
python-2.7 ×1
rebase ×1
reentrancy ×1
regex ×1
release ×1
stderr ×1
string ×1
unit-testing ×1
vi ×1
void ×1
volatile ×1