小编mck*_*mey的帖子

如何从Git中提取历史子集?

更新:我试图简化这里的真实示例以清楚地解释我的选项,但这并没有真正起作用.到目前为止,下面的链接示例过于笼统,甚至无法使用这个简单的示例.

我能够一直用SVN做这种事情并且非常熟练.现在我发现在Git中非常困难,并开始相信我的历史基本上太过密集,无法将它拉开.

真实世界的问题:我已经移动并重命名了十几个文件.他们的历史与数百个其他文件的历史混杂在一起,我想完全删除历史记录.

在SVN中,我可以使用dump/include-filter/exclude-filter/load序列来修剪存储库,很少我可能需要在加载之前在转储文件中手动重命名路径.

像这样的东西,我会做的:

SET Includes=trunk/src/Foo.aaa trunk/src/Foo.bbb trunk/src/Foo trunk/src/Bar
SET Excludes=trunk/src/Bar/Blah.aaa trunk/src/Foo/Blah.aaa

svnadmin dump FooSrc > Full.dump 2> Dump.log
svndumpfilter include %Includes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Full.dump > Filter_1.dump 2> Filter_1.log
svndumpfilter exclude %Excludes% --skip-missing-merge-sources --renumber-revs --drop-empty-revs < Filter_1.dump > Filter_2.dump 2> Filter_2.log
svnadmin create FooDest
svnadmin load FooDest --ignore-uuid < Filter_2.dump > Load.log 2> Load_Errors.log
Run Code Online (Sandbox Code Playgroud)

有没有人有一个很好的例子,这不仅仅是一个简单的删除单个文件或导出单个子目录?

我可以定义文件集的最简单方法是使用7个目录路径的列表.这些目录中的所有内容都需要保存,外部的所有内容都需要从历史记录中删除.


简化问题:

我有一个Git存储库,它有一些我想要提取到自己的存储库中的文件.问题是这些文件是在原始存储库的整个历史记录中创建和修改的,因此我无法弄清楚如何干净地提取它们.

以下是我的历史记录的要点(只有更多的提交和更多要忽略).正如你所看到的,我显然不打算稍后将这些文件从历史中挑选出来:

commit 4a09d3f977a8595d9e3f61766a5fd743e4265a56

M    src/Foo/Bar/FileToExtract2.foo
A    src/Foo/Bar/FileToExtract3.bar
D    src/Foo/AnotherFileToIgnore.txt

commit 05d26f23518083270cc45bf037ced29bec45e064

M    src/Foo/Blah/IgnoreThisOneToo.foo
M    src/Foo/AnotherFileToIgnore.txt

commit 343187228f4bd8e4427395453034c34ebd9a95f3 …
Run Code Online (Sandbox Code Playgroud)

git version-control history

10
推荐指数
1
解决办法
2727
查看次数

用Java模拟鸭子打字

问题:我希望能够在Java中一般地访问Java ojbect上的任何属性/字段,类似于动态语言(想想Groovy,JavaScript)的方式.我不知道当时我正在编写这个管道代码它是什么类型的对象或属性/字段名称是什么.但是当我去使用它时,我会知道属性/字段名称.

我目前的解决方案:到目前为止,我已经编写了一个简单的包装类,用于java.beans.Introspector获取Bean/POJO的属性并将它们公开为Map<String, Object>.它很粗糙但适用于简单的情况.

我的问题是除了反射/转换为Map之外还有哪些方法可以解决这个问题?

在我走上这条道路之前,我想知道是否有人知道我如何能够从Rhino中蚕食一些东西,或者javax.script.*是否有一个经过深思熟虑的实施这个概念的东西.或者也许是一种我没有考虑过的完全不同的方法.

编辑:是的我熟悉反射(我相信它是Introspector在引擎盖下使用的东西).如果还有其他经过深思熟虑的解决方案,我只是很好奇.

编辑2:似乎最流行的答案涉及1)直接或通过辅助类反映,和/或2)映射到实现所需类成员的接口.关于利用Groovy的评论,我真的很感兴趣.由于Groovy具有真正的duck-typing并且它是一种JVM语言,有没有办法在Groovy中创建一个简单的帮助器并从Java调用它?这将非常酷,可能更灵活,性能更好.

答:我认为Mike的答案是最好的,因为它是一个最接近的完整概念.对于这种特殊情况,我可能不会采用这种方式,但它肯定是一种有用的方法.任何看过这个的人都应该确保阅读这里的对话,因为那里有很多有用的信息.

谢谢!

java groovy dynamic-languages duck-typing rhino

10
推荐指数
1
解决办法
861
查看次数

Grails vs. JAX-RS for RESTful API/MVC App

我知道标题可能看起来像苹果和橘子,但听我说... :)

我正在构建MVC应用程序的体系结构,并考虑将什么用于控制器/服务的核心.该堆栈还将用作RESTful API,与UI同样重要.

我正在缩小我的堆栈,用Grails或JAX-RS构建(此时我已经排除了其他选项,并且对扩展此列表并不感兴趣).无论哪种方式,我都将使用Groovy,我的模型和视图几乎不会受到这种选择的影响,因此可以进一步平衡两者之间的一些差异.以下是我一直在思考的优点/缺点,并且想知道是否有人有任何其他意见或警告经验.

Grails的

  • 我不打算使用大量内置的Grails功能(GSP/SiteMesh,Hibernate,几乎所有插件),所以我担心Grails可能对我的目的来说有点沉重
  • 我担心我对处理REST API的能力没有足够的控制权,因为它非常以视图为中心
  • 我已经看到插件质量的不一致到我不确定我认为它们是'专业'的地步
  • 我喜欢惯例 - 配置和编辑 - 刷新,如果我使用JAX-RS,我可能想要连接类似的东西
  • 我喜欢的一切它简化Grails的命令行,但我担心它可能会用我的方式,因为我不使用尽可能多的堆栈得到
  • 我喜欢脚手架,但由于我没有使用Hibernate或GSP/SiteMesh,它可能无法很好地融合

JAX-RS

  • JAX-RS是为REST而设计的.这将使我的RESTful API真正实现,因为我完全控制
  • Groovy是Grails闪耀的重要组成部分,所以即使在JAX-RS中我也会从中受益
  • 我喜欢JAX-RS不会自动引入其他一些东西,所以我可以更好地控制哪些组件进/出
  • 不幸的是,因为它不会引入任何其他我最终需要的东西需要更多的工作,而Grails可能有一个插件
  • 将错过grails命令行和脚手架; 也许Maven可以填补一些空白

看起来每个用于创建动作和路由的功能非常相似(尽管实现样式不同).事实上还有其他SO问题希望触及这一点,所以我不太关心.

rest model-view-controller grails groovy jax-rs

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

CDN上的应用缓存清单?

我正在阅读有关HTML5应用缓存清单的详细信息(特别是来自这篇优秀的文章).我很好奇这个想法是否有用:

我们在子域内的CDN上托管所有静态资源(脚本,CSS,字体,图像)(例如cdn.example.com和app在www.example.com上).是否可以在CDN上托管应用缓存清单?例如,

<!doctype html>
<html manifest="http://cdn.example.com/appcache.manifest">
...
<script src="http://cdn.example.com/foo.js"></script>
...
</html>
Run Code Online (Sandbox Code Playgroud)

如果是,清单列表是否可以来自CDN根目录?例如,在清单中:

CACHE MANIFEST
/foo.js
Run Code Online (Sandbox Code Playgroud)

有没有人有这方面的经验和/或知道任何警告?


编辑: WHATWG规范的工作草案它说" 脱机应用程序缓存清单可以使用绝对路径甚至绝对URL ",然后显示一个带有图像的CDN URL的示例.

html5 application-cache offline-web-app

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

如何维护LINQ延迟执行?

假设我有一个IQueryable<T>表达式,我想封装它的定义,存储它并重用它,或者稍后将它嵌入到更大的查询中.例如:

IQueryable<Foo> myQuery =
    from foo in blah.Foos
    where foo.Bar == bar
    select foo;
Run Code Online (Sandbox Code Playgroud)

现在我相信我可以保持myQuery对象并像我描述的那样使用它.但有些事情我不确定:

  1. 如何最好地参数化?最初我在一个方法中定义了这个,然后IQueryable<T>作为方法的结果返回.这样我就可以定义blahbar作为方法参数,我猜它IQueryable<T>每次都会创建一个新的.这是封装逻辑的最佳方法IQueryable<T>吗?还有其他方法吗?

  2. 如果我的查询解析为标量而不是IQueryable 例如,如果我希望此查询完全如所示,但附加.Any()只是让我知道是否有任何匹配的结果?如果我添加,(...).Any()则结果bool立即执行,对吧?有没有使用这些方式Queryable运营(Any,SindleOrDefault,等),但不立即执行?LINQ-to-SQL如何处理这个问题?

编辑:第2部分更多的是试图了解IQueryable<T>.Where(Expression<Func<T, bool>>)vs. 之间的限制差异IQueryable<T>.Any(Expression<Func<T, bool>>).在创建要延迟执行的大型查询时,似乎后者并不灵活.的Where()可以追加,然后在其它构建体可以稍后所附,然后最终执行.由于Any()返回标量值,因此它可以在构建其余查询之前立即执行.

c# linq iqueryable deferred-execution

8
推荐指数
1
解决办法
4406
查看次数

W3C DOM可用于创建Document/DocType节点吗?

我很好奇是否有办法通过W3C DOM创建DocType节点?该规范明确指出它们是只读的并且无法编辑,但它们是否能够被创建?

http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927

Document接口似乎没有任何create方法:

http://www.w3.org/TR/DOM-Level-3-Core/core.html#i-Document

也许更广泛的问题是:可以通过DOM以编程方式构建全新的HTML文档吗?我知道document.createDocumentFragment()但我的意思是相当于具有特定doctype的根HTML文档等.


更新:它看起来像最近的Gecko和WebKit实现DOMImplementation.createDocument,DOMImplementation.createDocumentType但不是IE8或之前(没有检查IE9).所以很遗憾,我仍然被困在那里.

我也有点不确定一旦拥有它,我可以用这个新的Document实例做什么.所有当前的DOM方法都挂起了全局文档对象,所以似乎没有办法将它与新的交换.

html doctype w3c dom

8
推荐指数
1
解决办法
755
查看次数

解决C#CodeDom在csc.exe中导致堆栈溢出(CS1647)的问题?

我有一种情况需要生成一个带有大字符串const的类.我控制之外的代码导致我生成的CodeDom树被发送到C#源,然后被编译为更大的Assembly的一部分.

不幸的是,我遇到这种情况,如果这个字符串的长度超过Win2K8 x64中的335440个字符(Win2K3 x86中的926240),则C#编译器会以致命错误退出:

致命错误CS1647:在'int'附近编译表达式太长或太复杂

MSDN称CS1647是"编译器中的堆栈溢出"(没有双关语!).仔细观察我已经确定CodeDom"很好地"将我的字符串const包装在80个字符处.这导致编译器连接4193个字符串块,这显然是x64 NetFx中C#编译器的堆栈深度.CSC.exe必须在内部递归计算此表达式以"重新水化"我的单个字符串.

我最初的问题是:"有没有人知道改变代码生成器如何发出字符串的解决办法? "我无法控制外部系统使用C#source作为中间件的事实,我希望这是一个常量(而不是而不是字符串的运行时串联).

或者,我该怎么制定这个表达式使得一定数量的字符后,我仍然能够创造一个恒定的,但它是由多个的大型块?

完整的repro在这里:

// this string breaks CSC: 335440 is Win2K8 x64 max, 926240 is Win2K3 x86 max
string HugeString = new String('X', 926300);

CodeDomProvider provider = CodeDomProvider.CreateProvider("C#");
CodeCompileUnit code = new CodeCompileUnit();

// namespace Foo {}
CodeNamespace ns = new CodeNamespace("Foo");
code.Namespaces.Add(ns);

// public class Bar {}
CodeTypeDeclaration type = new CodeTypeDeclaration();
type.IsClass = true;
type.Name = "Bar";
type.Attributes = MemberAttributes.Public;
ns.Types.Add(type);

// public const string HugeString …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction codedom csc

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

用Java签署Amazon S3策略

出于某种原因,我正在努力使用我的Amazon S3上传策略的签名生成.我发誓,我有一点工作,但不再.任何帮助将非常感激.我需要一双新鲜的眼睛.

Amazon S3 Signature Tester的输出进行比较时,我没有得到相同的签名.但是,当我直接使用该工具发出的签名时,一切正常.所以问题肯定在我的签署过程中.此外,该工具中出现的"要签名的字符串"十六进制解码与我签名的输入策略相同.

AWS文档说构建策略签名的过程应该是这样的:

  1. 使用UTF-8编码策略.
  2. 使用Base64对这些UTF-8字节进行编码.
  3. 使用HMAC SHA-1使用您的秘密访问密钥签署策略.
  4. 使用Base64对SHA-1签名进行编码.

似乎足够直截了当.模棱两可的唯一地方可能是#3.AWS文档显示了用于生成HMAC-SHA1的示例代码段,这与我见过的其他Java加密示例一致.

我正在使用Apache Commons的Base64的v1.6.我的签名代码基本上如下所示:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/* ... */

private static final String UTF8 = "UTF-8";
private static final String HMACSHA1 = "HmacSHA1";

public static String sign(String secret, String data) {
    byte[] dataBytes = data.getBytes(UTF8);
    byte[] secretBytes = secret.getBytes(UTF8);

    SecretKeySpec signingKey = new SecretKeySpec(secretBytes, HMACSHA1);

    Mac mac = Mac.getInstance(HMACSHA1);
    mac.init(signingKey);
    byte[] signature = mac.doFinal(dataBytes);

    return …
Run Code Online (Sandbox Code Playgroud)

java sha1 amazon-s3 hmac

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

JAX-RS/Jersey中的HTTP内容协商冲突?

我很享受JAX-RS(特别是Jersey)的自动HTTP内容协商,即它能够通过"Accept"和/或"Content-Type"标头来路由我的资源.但是我发现有时它会在发生冲突时给我足够的控制权.

例如,请考虑以下端点:

@Path("/order")
public class OrderController {

    @GET
    @Path("{orderID: \\d+}")
    @Produces("text/html")
    public View getOrderView(@PathParam("orderID") long id) {
        Order order = this.getOrderData(id);
        return new OrderView(order);
    }

    @GET
    @Path("{orderID: \\d+}")
    @Produces({"application/json", "application/xml"})
    public Order getOrderData(@PathParam("orderID") long id) {
        return new OrderService.findOrder(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

我会在Firefox和Chrome之间得到不同的结果.Firefox将映射到HTML端点,而当我将每个端点URL导航到端点URL时,Chrome将触发XML端点.它们之间的区别在于它们的Accept标头中列出的MIME类型的顺序.Chrome发送以下内容:

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Run Code Online (Sandbox Code Playgroud)

与Firefox相比,它首先列出了HTML:

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)

似乎逻辑上,当所有加权相同时,它将匹配第一个条目.但在我的情况下,我得到的结果与我想要的不同,所以确定更好的打破方法会更好.

我的问题:如果没有将标题信息注入这些方法并自己执行媒体类型处理,有没有办法"调整权重",以便在出现平局时说话?例如,我可以告诉它总是用HTML来胜过XML吗?我的RESTful客户端非常清楚他们想要什么类型,但浏览器众所周知地使用Accept标头.(就我个人而言,我认为他们应该将HTML重量略高于XML,因为这是用户所期望的,但这有点晚了.)

或者,我可以在某个集中位置执行自己的自定义内容协商吗?我并不反对手动编写这个逻辑,但如果它意味着将它应用于我的每个资源实例都不会.JAX-RS是否有一些向管道添加过滤器的概念,以便在路由之前调整请求?

rest jax-rs jersey content-negotiation http-headers

6
推荐指数
2
解决办法
6847
查看次数

transtionend/animationend事件的特征检测?

我正在寻找一种更清晰的方法来检测实际的名称transitionend.我已经看到很多例子只是强力添加处理程序到所有的变化.另外,我不想依赖jQuery(或类似的框架).

我基本上从这个列表开始,并希望绑定最合适的(即列表中的第一个匹配).

var transitionendName,
    events = [
        'transitionend',
        'webkitTransitionEnd',
        'MozTransitionEnd',
        'oTransitionEnd'
    ];

// ^^^^^ your code here

myElem.addEventListener(transitionendName, myHandler, false);
Run Code Online (Sandbox Code Playgroud)

有人觉得他们有一个干净的解决方案吗?相同的解决方案可能适用于animationend事件.

编辑: msTransitionEnd和'-ms-'前缀属性在最终的IE10发布候选版本中被删除.

javascript-events css3 css-transitions browser-feature-detection

6
推荐指数
1
解决办法
3679
查看次数