小编Cre*_*ing的帖子

git squash并保留最后一次提交的时间戳

考虑我有提交

... -- A -- B -- C
Run Code Online (Sandbox Code Playgroud)

如果我用来git rebase -i将所有三个提交压缩成一个,我们就可以

pick A
squash B
squash C
Run Code Online (Sandbox Code Playgroud)

我看到结果提交A有其原始时间戳.怎么能让它继承提交的时间戳C(最后一个)?

我能想到的是git commit --amend --date=<new_time>,但这种方式需要C在壁球之前或从reflog中记住提交的时间戳.

我发现最新提交的时间戳更合理,因为它显示了我实际完成提交中的工作的时间.

谢谢.

git

22
推荐指数
2
解决办法
2140
查看次数

当@SuppressWarnings("弃用")不起作用时,如何避免弃用警告?

我们有一个Java项目.我们启用-Xlint(启用警告)和-Werror(将警告视为错误)标志javac,以确保我们的代码没有警告.最近我们决定弃用一堂课.在某些情况下,问题根本@SuppressWarnings("deprecation")不会抑制弃用警告,从而导致构建失败.以下是我遇到的用例列表:

  1. 在其他非弃用类中导入.
  2. 在其他已弃用的类中导入.
  3. 家长班.
  4. 输入参数.例如

    @SuppressWarnings("deprecation")
    public class Foo extends Bar<DeprecatedClass>
    { ... }
    
    Run Code Online (Sandbox Code Playgroud)

    然而,即使没有压制,这个也没有警告:

    @Deprecated
    public class DeprecatedClass extends Bar<DeprecatedClass>
    { ... }
    
    Run Code Online (Sandbox Code Playgroud)

AFAIK,没有注释导入的语法,因此对于案例1和2,我们的解决方案是导入*或避免导入.对于案例3和案例4,Java 6和7都不会禁止警告.Java 8将正确地抑制它(可能修复了一个错误).到目前为止还没有解决方案.

不幸的是,我们此时必须支持Java 6,7和8.有办法解决这个问题吗?它是我们Java API发展的障碍.

附录

很多人问为什么我们仍然在我们自己的代码库中使用已弃用的类.原因是该项目是一个图书馆,支持许多不同的客户.在引入新的替换API时,我们必须首先弃用旧的API,将其保留在我们的代码库中,等待所有客户端迁移然后将其删除.有三种常见用例:

  • 我们弃用了类,FooBarFoo扩展的地方Bar.我的问题就是案例2和3.
  • 我们弃用了类,FooBarFoo扩展的地方Collection<Bar>.这是案例2和4.
  • 我们必须保持所有的测试代码类FooBar.测试代码导入这些类.情况如此1.

为什么要坚持考试?不要忘记,如果发现严重错误(例如内存泄漏,安全问题),并且客户端无法轻松迁移到新版本,我们仍需要为旧API提供错误修复.并且必须测试所有更改.

我觉得我们的情况应该在软件库开发和API演变中相当普遍.令人惊讶的是,Java用了很长时间(直到Java 8)来修复bug.

java compilation deprecated compiler-warnings suppress-warnings

19
推荐指数
1
解决办法
6585
查看次数

Mercurial:更新到修订版,但不修改本地文件

假设存储库有20个修订版.记录中的当前版本是修订版10,而实际的本地文件基于最新版本20.我不想从修订版10中分支出来.我想继续修订20.

目前我正在做的是将所有文件复制到修订目录之外,运行hg update -C(更新修订版号),删除存储库目录中的所有文件,复制所有文件,然后提交.你可以说这很烦人,浪费时间.有没有办法只更新修订号,但不能修改任何本地文件?

提前致谢.

编辑:有很多用例(我主要使用TortoiseHg).

1)在提交期间提示从存储库中删除文件时,我错误地选择"否".我可以使用mq中的strip删除修订版本,但这将恢复所有提交的文件.相反,我想"重新父"到先前的修订版,再次提交,然后删除不需要的修订版.这可能随时发生在任何人身上,不仅仅是我,而不仅仅是一次.

2)我有一台开发机器A.我启动了项目,几个月后切换到机器B. A上的代码变旧,B上的代码未更改.如果我想在A上继续开发,我需要通过Flash或网络等将代码复制到A.现在我想在没有分支的情况下提交A(因为A上的代码实际上是基于当前的提示).这可能不那么频繁,但仍然不是"一次"问题,更可能是在涉及大项目时.

3)存储库有2个分支C和D.大约有2000个文件.当前提示是在C中.我想用C中的相同命名文件覆盖D中的一些文件(因为C更多实现),同时保留其他文件不变,然后在D中创建新提示.我有几个选项.我可以更新到D,将D的最新版本与当前提示进行比较,进行更改和提交.更新需要一些时间,比较的难度很大程度上依赖于比较工具.我还可以先比较,进行更改,备份整个目录,更新到D,然后恢复整个目录.这更加麻烦.但如果我可以"重新父母"到D,我只需要做出改变并提交.这不依赖于比较工具,因为TortoiseHg中的提交窗口具有差异列表.

如果你想思考,可能会有更多的用例.我希望Mercurial提供这样的"重新父母"功能(据称是hg更新的新选项),或者至少是方便的选择.

mercurial tortoisehg

15
推荐指数
2
解决办法
4829
查看次数

XPath与DOM的性能

有人会在不同场景中启发我对XPath和DOM之间的综合性能比较吗?我已经阅读了一些问题,比如xPath vs DOM API,哪一个有更好的性能XPath或querySelector?.他们都没有提到具体案件.这是我可以开始的一些事情.

  1. 不涉及迭代.getElementById(foobar)vs //*[@ id ='foobar'].前者经常比后者快吗?如果后者被优化怎么办,例如/ html/body/div [@ id ='foo']/div [@ id ='foobar']?
  2. 涉及迭代.getElementByX然后遍历子节点与XPath生成快照然后遍历快照项.
  3. 轴涉及.getElementByX然后遍历下一个兄弟姐妹vs // follow-sibling :: foobar.
  4. 不同的实现.不同的浏览器和库以不同方式实现XPath和DOM.哪个浏览器的XPath实现更好?

作为xPath与DOM API的答案,哪一个具有更好的性能,平均程序员可能会在以DOM方式实现复杂任务(例如涉及多个轴)时搞砸,同时保证优化XPath.因此,我的问题只关心可以通过两种方式完成的简单选择.

谢谢你的评论.

performance xpath dom

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

git:只推送特定标签

AFAIK,git push --tag将refs/tags下的每个标签推送到远程.我想知道git中是否有一种方法只能推送一些与通配符或正则表达式相匹配的标签?

例如,我的回购有标签v1.0,v1.1,v2.0v2.1.我想只推v2.*.我试过了

git push <repo> refs/tags/v2.*
Run Code Online (Sandbox Code Playgroud)

并得到错误

致命:refspec的远程部分不是refs/tags/v2中的有效名称.*

当然,我总能做到

cd .git && ls refs/tags/v2.* | xargs git push <repo>
Run Code Online (Sandbox Code Playgroud)

但这并不会惹恼.

tags git

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

禁用 Python 自动跨行连接字符串

我正在创建一个长长的字符串列表,如下所示:

tlds = [
  'com',
  'net',
  'org'
  'edu',
  'gov',
...
]
Run Code Online (Sandbox Code Playgroud)

我后面漏了一个逗号'org'。Python 自动将其与下一行中的字符串连接成'orgedu'. 这成为一个很难识别的错误。

定义多行字符串的方法已经有很多种,其中一些非常明确。所以我想知道有没有办法禁用这种特定行为?

python

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

WiX:有条件地安装Service,但无条件安装文件

在Windows中安装XML工具集,安装服务,我们组<ServiceInstall><File>一个<Component>.为了有条件地安装服务,我们提出<Condition><Component>.但是,如果条件为false,则也不会安装该文件.如果我把它<File>放在一个无条件的<Component>,那么该服务没有可执行文件路径,因此安装将失败.如果我放入<File>两者<Component>,将找到重复的符号.

问题是,我们可以有条件地安装服务,但无条件安装相关的可执行文件吗?

谢谢!

service conditional wix file

12
推荐指数
1
解决办法
3836
查看次数

用SRW锁替换临界区

如果应用程序是针对Windows Vista或更高版本的,我们是否可以用SRW锁替换所有关键部分?由于临界区是互斥的,对于使用它相当于专用模式下的SRW锁,对吗?根据MSDN,SRW针对速度和空间进行了优化.这样做有什么缺点吗?我不确定CS和SRW是如何在内部由Microsoft实现的.

谢谢!

multithreading synchronization critical-section slim

12
推荐指数
1
解决办法
4078
查看次数

gVim - 显示匹配搜索词的位置标记

gVim中是否有功能,插件或方法来显示匹配搜索词的标记,指出它们在缓冲区中的粗略位置?例如,在缓冲区中搜索"foo"时,该功能会将标记与垂直滚动条一起放置.每个标记表示匹配的"foo".滚动到该位置时,缓冲区中会显示"foo".有了这个功能,我可以很容易地直观地告诉术语的分布模式,当前术语在文档中是相对的,大约是多少次出现.

如果没有这样的功能,有没有办法在插件中操纵滚动条和gVim的其他GUI组件?

在Firefox中,类似功能由搜索标记(过时),XUL/Migemo(过时)或FindBar Tweak(最新)扩展完成.

更新:

vim search position marker

12
推荐指数
1
解决办法
682
查看次数

PHP中的共享内存文件

我使用openssl_pkcs7_signopenssl_pkcs7_encrypt创建加密数据.这些函数只接受文件名.我想将临时文件存储在共享内存中以提高性能.我在Linux中可以理解file_put_contents('/dev/shm/xxx', data),但Windows无法实现.PHP中是否有可移植的方式来执行此操作?shmop_功能会有帮助吗?谢谢.

PS:或者有没有办法让这些函数接受数据字符串?

PS2:请不要建议/usr/bin/openssl从PHP 调用.它不便携.

php windows file shared-memory

9
推荐指数
2
解决办法
3670
查看次数

WiX bin目录路径的变量?

是否有指向WiX bin目录路径的环境变量?我想在我的项目的后期构建事件中使用火炬,但我找不到这个变量.我无法对路径进行硬编码,因为wixproj由group共享.

$(WixTargetsPath)和$(WixTasksPath)等变量用于MSBuild.这些不是我想要的.

谢谢!

wix path bin

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

使用"const"关键字进行C类型转换

我通常在C/C++代码中使用C类型转换.我的问题是,在构建类型中添加"const"关键字是否意味着结果的任何内容?

例如,我可以想出几个场景:

const my_struct *func1()
{
   my_struct *my_ptr = new my_struct;

   // modify member variables

   return (const my_struct *)my_ptr;
   // return my_instance;
}
Run Code Online (Sandbox Code Playgroud)

在这一个中,该函数构造一个struct的新实例,并将其转换为常量指针,因此除了删除它之外,调用者将无法进一步修改其内部状态.是"const"转换是必需的,推荐的还是简单的不必要的,因为任何一个return语句都有效.

在这一个中,my_base是基类my_derive.

const my_base *func2(const my_derive *my_ptr)
{
    return (const my_base *)my_ptr;
    // return (my_base *)my_ptr;
}
Run Code Online (Sandbox Code Playgroud)

因为my_ptr已经是一个const指针,所以会在转换时使用(my_base *)const_cast来删除const和另一个隐式const_cast吗?

是否有任何理由将"const"添加到整数函数参数中,因为更改它永远不会影响函数外的状态?

void func3(const int i)
{
    // i = 0; is not allowed, but why, as it is harmless?
}
Run Code Online (Sandbox Code Playgroud)

如何在转换整数时添加"const"?我觉得这应该很像func2().

void func4(short i)
{
    const unsigned int …
Run Code Online (Sandbox Code Playgroud)

c c++ casting const

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

如何使共享值在没有互斥锁的情况下保持一致?

我有以下代码。我不明白为什么读者会看到不一致的变量值。

uint64_t get_counter() {
    static uint64_t counter = 0;
    static std::mutex m;
    std::unique_lock l(m);
    return ++counter;
}

auto main() -> int {
    // uint64_t shared = 0;
    std::atomic<uint64_t> shared = 0;

    const auto writer = [&shared]() -> void {
        while (true) {
            shared = get_counter();
            std::this_thread::yield();
        }
    };
    const auto reader = [&shared]() -> void {
        while (true) {
            const uint64_t local = shared;
            if (local > shared) {
                cout << local << " " << shared << endl;
            } …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading atomic

4
推荐指数
1
解决办法
75
查看次数