Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Jenkins上的文件内容突然改变_Git - Fatal编程技术网

Git Jenkins上的文件内容突然改变

Git Jenkins上的文件内容突然改变,git,Git,这个问题真令人头痛。我有一些代码来提取一个ZIP文件,如下所示: 公共文件读取(InputStream输入)引发IOException{ try(final BufferedInputStream BufferedInputStream=新的BufferedInputStream(输入); 最终ZipInputStream输入流=新ZipInputStream(bufferedInputStream);){ final File outputFolder=Files.createTempDire

这个问题真令人头痛。我有一些代码来提取一个ZIP文件,如下所示:

公共文件读取(InputStream输入)引发IOException{
try(final BufferedInputStream BufferedInputStream=新的BufferedInputStream(输入);
最终ZipInputStream输入流=新ZipInputStream(bufferedInputStream);){
final File outputFolder=Files.createTempDirectory(null).toFile();
ZipEntry入口;
while((entry=inputStream.getnextery())!=null){
final File outputFile=新文件(outputFolder,entry.getName());
extractEntry(inputStream、outputFile);
}
返回outputFolder;
}
}
私有void extractEntry(InputStream为,File outputFile)引发IOException{
try(FileOutputStream fos=newfileoutputstream(outputFile);){
最终字节[]buf=新字节[this.bufferSize];
整数长度;
而((length=is.read(buf,0,buf.length))>=0){
fos.write(buf,0,长度);
}
}
}
我对这个类的测试只是将我放入ZIP的文件内容与上面代码摘录的文件进行比较:

Assert.assertArrayEquals(Files.readAllBytes(referenceFile)、Files.readAllBytes(extractedFile));
在任何情况下都应该有效,对吗?对我来说是的。在我的机器上,文件的长度是973字节

但是,在Jenkins上运行时,相同的测试失败,但出现以下异常:

java.lang.AssertionError: array lengths differed, expected.length=996 actual.length=973
实际的数字是固定的,所以预期的长度突然变长了。我不知道那怎么可能发生。当我下载这些文件时,它们看起来肯定是相同的,即使是逐字节比较

有什么问题


我确保两台机器都运行Open JDK 11.0.2,因此Java版本这一次不应该成为问题。

因此,我在整理问题时找到了解决方案,但我将把答案留给我自己和任何有神秘问题的人:

是吉特。这类问题总是很棘手。为什么它会与Git有所不同

有时,Git会在没有任何警告的情况下,认为您的换行符不够好,并将其更改为其他内容。我的猜测是,由于字节计数增加,它在我的换行符“\n”之前或之后添加了“\r”。Guess Git对ZIP文件失去了兴趣,只更改了参考文件

因此,当我的代码提取ZIP时,它们有原始的换行符,但参考文件有Git更改的换行符,因此它们不完全相同

虽然您可能会认为“Git随机添加换行符是件好事”,但我不知道Git为什么不将它们添加到您的本地存储库中。如果我的副本和詹金斯的副本完全相同,我会更快地找到问题的根源


注意:我发现了这个问题,因为我认为这是一个奇怪的巧合,23个字节出现在Jenkins上,而我的文件有23行。因此,如果您有类似的问题,请尝试检查类似的问题。

是否在某处关闭文件输出流?@LasseV.Karlsen如果您看不到输出流
fos
关闭的位置,并且如果它没有编译,您可能猜到了错误的语言;)这是Java代码,尽管它与解决方案无关。你是对的,我猜错了。我没有看到语言标签,所以它出现在我的流中,看起来像C#ish。很抱歉。