小编Gre*_*ill的帖子

做一个"git export"(比如"svn export")?

我一直在想是否有一个很好的"git export"解决方案,它创建了一个没有.git存储库目录的树的副本.我知道至少有三种方法:

  1. git clone然后删除.git存储库目录.
  2. git checkout-index 提到这个功能,但开头是"只需将所需的树读入索引...",我不完全确定如何做.
  3. git-export是第三方脚本,基本上git clone进入临时位置,然后rsync --exclude='.git'进入最终目的地.

这些解决方案都没有让我感到满意.最接近的一个svn export选项可能是选项1,因为这两个都要求目标目录首先为空.但是假设我可以弄清楚将树读入索引意味着什么,选项2似乎更好.

git export svn-export git-archive

2312
推荐指数
24
解决办法
62万
查看次数

如何恢复Git中丢失的存储?

我经常使用git stashgit stash pop保存和恢复工作树中的更改.昨天我的工作树上有一些变化,我已经藏起来了,然后我对工作树做了更多改动.我想回去查看昨天发生的变化,但git stash pop似乎删除了对相关提交的所有引用.

我知道如果我使用git stash那么.git/refs/stash包含用于创建存储的提交的引用.而.git/logs/refs/stash包含整个存储.但那些参考文献已经消失了git stash pop.我知道提交仍然在我的存储库中,但我不知道它是什么.

有没有一种简单的方法来恢复昨天的隐藏提交引用?

请注意,这对我来说并不重要,因为我有每日备份,可以回到昨天的工作树来获取我的更改.我问,因为必须有一个更简单的方法!

git recovery git-stash

1617
推荐指数
22
解决办法
28万
查看次数

"是"运算符与整数意外行为

为什么以下在Python中出现意外行为?

>>> a = 256
>>> b = 256
>>> a is b
True           # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False          # What happened here? Why is this False?
>>> 257 is 257
True           # Yet the literal numbers compare properly
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 2.5.2.尝试一些不同版本的Python,似乎Python 2.3.3显示了99到100之间的上述行为.

基于以上所述,我可以假设Python在内部实现,使得"小"整数以不同于大整数的方式存储,is运算符可以区分.为什么泄漏抽象?当我不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好的方法是什么?

python int identity operators python-internals

476
推荐指数
11
解决办法
6万
查看次数

如何在Git中的分支上获取更改

自从当前分支分支以来,在分支上获取提交日志的最佳方法是什么?我目前的解决方案是:

git log $(git merge-base HEAD branch)..branch
Run Code Online (Sandbox Code Playgroud)

git-diff的文档表明它git diff A...B等同于git diff $(git-merge-base A B) B.另一方面,git-rev-parse的文档表明它r1...r2被定义为r1 r2 --not $(git merge-base --all r1 r2).

为什么这些不同?请注意,这git diff HEAD...branch给了我想要的差异,但相应的git log命令给了我更多的东西.

在图片中,假设:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

我想得到一个包含提交x,y,z的日志.

  • git diff HEAD...branch 给出了这些提交
  • 但是,git log HEAD...branch给出x,y,z,c,d,e.

git branch

257
推荐指数
7
解决办法
19万
查看次数

如何解析shell脚本中的符号链接

给定绝对或相对路径(在类Unix系统中),我想在解析任何中间符号链接后确定目标的完整路径.奖励积分也可以同时解析〜用户名表示法.

如果目标是目录,则可以将chdir()放入目录然后调用getcwd(),但我真的想从shell脚本而不是编写C帮助程序.不幸的是,shell倾向于试图隐藏用户的符号链接(这是OS X上的bash):

$ ls -ld foo bar
drwxr-xr-x   2 greg  greg  68 Aug 11 22:36 bar
lrwxr-xr-x   1 greg  greg   3 Aug 11 22:36 foo -> bar
$ cd foo
$ pwd
/Users/greg/tmp/foo
$
Run Code Online (Sandbox Code Playgroud)

我想要的是一个函数resolve(),这样当从上例中的tmp目录执行时,解析("foo")=="/ Users/greg/tmp/bar".

bash shell scripting symlink

211
推荐指数
7
解决办法
15万
查看次数

将Unicode字符插入JavaScript

我需要在我的html页面上插入Omega(Ω).我正在使用其HTML转义代码来执行此操作,因此我可以编写Ω并获取Ω.当我将它放入HTML元素时,这一切都很好; 但是,当我尝试将它放入我的JS时,例如var Omega = Ω,它将该代码解析为JS并且整个事情都不起作用.有谁知道如何去做?

html javascript unicode

118
推荐指数
4
解决办法
13万
查看次数

如何用zlib解压缩gzip流?

Gzip格式文件(gzip例如,使用程序创建)使用"deflate"压缩算法,该算法与zlib使用的压缩算法相同.但是,当使用zlib来膨胀gzip压缩文件时,库会返回一个Z_DATA_ERROR.

如何使用zlib解压缩gzip文件?

gzip zlib inflate

103
推荐指数
3
解决办法
8万
查看次数

为什么Google Play商店说我的Android应用与我自己的设备不兼容?

我对于提出这个问题犹豫不决,因为好像很多人都有类似的问题,但我找不到任何可以解决我的特定实例的解决方案.

我开发了一个Android应用程序(链接到实际的应用程序)并将其上传到Play商店.Play商店说

"This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."

当然这是我开发应用程序的手机,所以它应该是兼容的.有些人用其他设备说它报告兼容,有些人说它报告不兼容,但我发现没有趋势.(显然我不太了解Android设备的人.)

我尝试过以下方法:

  • res/raw按照此答案的建议将大型文件移出目录.那里唯一的文件是一个~700 kB的文本文件,但我把它移到assets/了没有明显变化的地方.

  • 添加以下两个功能断言:

    <uses-feature android:name="android.hardware.faketouch" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
    
    Run Code Online (Sandbox Code Playgroud)

    我想我的手机可能并没有声称支持通常的android.hardware.touchscreen功能,但是再一次,没有明显的变化.

将APK上传到Play商店时,它报告为活动的唯一过滤器就是该android.hardware.faketouch功能.

以下是输出aapt dump badging bin/NZSLDict-release.apk:

package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
sdkVersion:'4'
targetSdkVersion:'4'
uses-feature:'android.hardware.faketouch'
uses-feature-not-required:'android.hardware.touchscreen'
application-label:'NZSL Dictionary'
application-icon-160:'res/drawable/icon.png'
application: label='NZSL Dictionary' icon='res/drawable/icon.png'
launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary'  label='NZSL Dictionary' icon=''
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: …
Run Code Online (Sandbox Code Playgroud)

android google-play

87
推荐指数
8
解决办法
12万
查看次数

多少空检查就足够了?

什么是什么时候没有必要检查空?

我最近一直在研究的许多继承代码都有空检查令人作呕.Null检查普通函数,对表示非空返回的API调用进行空检查等.在某些情况下,空检查是合理的,但在许多地方,null不是合理的期望.

我听过很多论点,从"你不能相信其他代码"到"总是防守程序"到"直到语言保证我的非空值,我总会检查." 我当然同意这些原则中的许多原则,但我发现过多的空值检查会导致其他通常违反这些原则的问题.顽强的空检查真的值得吗?

通常,我观察到过多的空检查代码实际上质量较差,而不是质量较高.许多代码似乎都专注于空检查,开发人员已经忽略了其他重要的特性,例如可读性,正确性或异常处理.特别是,我看到很多代码忽略了std :: bad_alloc异常,但对a进行了空检查new.

在C++中,由于解除引用空指针的不可预测行为,我在某种程度上理解这一点; 在Java,C#,Python等中更优雅地处理null dereference.我刚刚看到了警惕的空检查的不良例子,还是真的有什么东西可以解决这个问题?

这个问题旨在与语言无关,尽管我主要对C++,Java和C#感兴趣.


我见过的一些空检查的例子似乎过多,包括:


这个例子似乎是非标准编译器的原因,因为C++规范说失败的新抛出异常.除非您明确支持不合规的编译器,否则这有意义吗?这确实让任何意义的,如Java或C#(甚至C++/CLR)托管语言?

try {
   MyObject* obj = new MyObject(); 
   if(obj!=NULL) {
      //do something
   } else {
      //??? most code I see has log-it and move on
      //or it repeats what's in the exception handler
   }
} catch(std::bad_alloc) {
   //Do something? normally--this code is wrong as it allocates
   //more memory and will likely fail, such as writing to a log file.
} …
Run Code Online (Sandbox Code Playgroud)

c# c++ java design-by-contract

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

如何在Python 3中设置sys.stdout编码?

在Python 2中设置默认输出编码是一个众所周知的习惯用法:

sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
Run Code Online (Sandbox Code Playgroud)

这将sys.stdout对象包装在编解码器编写器中,该编解码器编写器以UTF-8编码输出.

但是,这种技术在Python 3中不起作用,因为sys.stdout.write()期望a str,但是编码的结果是bytes,并且当codecs尝试将编码的字节写入原始时发生错误sys.stdout.

在Python 3中执行此操作的正确方法是什么?

python unicode stdout python-3.x

56
推荐指数
7
解决办法
4万
查看次数