为什么git要在add上重命名这些文件?
我有一个包含大量PDF文件的git存储库。在其中一些机器上运行OCR后,我运行了git add。接受变化并将其分阶段进行。之后,git状态如下所示:为什么git要在add上重命名这些文件?,git,pdf,Git,Pdf,我有一个包含大量PDF文件的git存储库。在其中一些机器上运行OCR后,我运行了git add。接受变化并将其分阶段进行。之后,git状态如下所示: # modified: Ackerman, Daniel J., 1971 ST.pdf # modified: Ackerman, Laura C., 2006 SD.pdf # modified: Adolphson, Donald G., 1956 ST.pdf # renamed:
# modified: Ackerman, Daniel J., 1971 ST.pdf
# modified: Ackerman, Laura C., 2006 SD.pdf
# modified: Adolphson, Donald G., 1956 ST.pdf
# renamed: Baugh, Gerald R., 1956 ST.pdf -> Alkofer, Anton R., 1958 ST.pdf
# modified: Amundsen, Julie, 2012 ST.pdf
# modified: Babiracki, Dylan, 2015.pdf
# renamed: Wangerud, Kenneth W., 1973 ST.pdf -> Bailey, Palmer K., 1970 ST.pdf
# modified: Bakken, Wallace E., 1958 ST.pdf
# modified: Baugh, Gerald R., 1956 ST.pdf
# modified: Bednar, Jesse E., 1959 ST.pdf
# modified: Belanus, Luke 2016.pdf
# modified: Berg, Larry D., 1960 ST.pdf
# modified: Blanksma, Derrick J., 2011 SD.pdf
# modified: Blum, Raymond L., 1957 ST.pdf
# renamed: Overmoe, Terry H., 1956 ST.pdf -> Bonneville, John W., 1956 ST.pdf
# modified: Bonneville, John W., 1961.pdf
# modified: Brouillard, Lee A., 1977 ST.pdf
# modified: Brown, Ronald G., 1968 ST.pdf
# modified: Burrows, Robert A., 1995 ST.pdf
# modified: Bushaw, Dewey J., 1957 ST.pdf
# modified: Carns, Matthew, 2010 SD.pdf
# modified: Christensen, Robert E., 1958 ST.pdf
# modified: Christenson, Chase J., 2008.pdf
# renamed: Traynor, Terrance O. 1977 ST.pdf -> Clayton, Lee, 1960.pdf
# modified: Cook, Charles W., 1968 ST.pdf
# modified: Crowell, Anna M., 2011 ST.pdf
# modified: Davidson, Jerry, NA, ST.pdf
# modified: DeYaegher, Wilfred M., 1955 ST.pdf
# modified: Decker, Amy, 2005 SD.pdf
# modified: Degenstein, Joel A., 1975 ST.pdf
# modified: Dove. Andrea, 2014 ST.pdf
# modified: Elofson, Richard R., NA, ST.pdf
# renamed: Hoeft, Erin, 2014 ST.pdf -> Englerth, E. J., 1958 ST.pdf
# modified: Erickson, Kirth A., 1967 ST.pdf
# modified: Facca, Fosco V., 1970 ST.pdf
# renamed: Thomte, Dennis, NA, ST.pdf -> Flewitt, William E., 1957 ST.pdf
# renamed: Saunders, Gary, 1960 ST.pdf -> Forsgren, Frank M., 1980 ST.pdf
# renamed: Clayton, Lee, 1960.pdf -> Friestad, Harlan K., 1966 ST.pdf
# modified: Friestad, Mark B., 1970 ST.pdf
# modified: Friesz, Jacob; Bryantt, Tanner; Hanson, Luke; Delaney, Emily , 2014 SD.pdf
# renamed: Koons, Robert R., 1957.pdf -> Froelich, Larry L.,1964.pdf
# renamed: Halle, Richard, 1972 ST.pdf -> Galambos, William E., 1958 ST.pdf
# renamed: Huot, Ray E., NA ST.pdf -> Garske, Jay, 1957 ST.pdf
# renamed: Walsh, Michael W., 1956 ST.pdf -> Gillin, Donald S., 1958 ST.pdf
# modified: Gorecki, Charles 2007 SD.pdf
# modified: Gray, Lockhart R., 1958 ST.pdf
# renamed: Berg, Larry D., 1960 ST.pdf -> Groenewold, Joanne R., 1971 ST.pdf
# modified: Gunderson, Lori, 1998 SD.pdf
# modified: Halle, Richard, 1972 ST.pdf
# modified: Hannesson, James H., 1957 ST.pdf
# modified: Hartig, Caitlyn M., 2015 ST.pdf
# modified: Harvey, Erik W., 1991 ST.pdf
# modified: Hegle, Lloyd 2005.pdf
# modified: Hendrickson, Richard D., 1956 ST.pdf
# modified: Hesse, Damien; Krieger, Amanda; Padgett, Alex; Zander, Derek, 2012 SD.pdf
# modified: Hoeft, Erin, 2014 ST.pdf
# modified: Holweger, Todd L., 1995 ST.pdf
# modified: Hrabik, Jon, 2008 SD.pdf
# modified: Huot, Ray E., NA ST.pdf
# modified: Ignatius, Ashley, 2008 ST.pdf
# modified: Jahraus, Tim, NA, ST.pdf
# modified: Jeannotte, Tyson, 2015 ST.pdf
# renamed: Redmond, John C., 1955.pdf -> Jergens, Matthew, 2005 SD.pdf
# modified: Johnson, Corey 2009 SD.pdf
# modified: Johnson, Irwin S., 1957 ST.pdf
# modified: Jurgens, Matthew, 2005 SD.pdf
# modified: Klapperich, Ryan, 2004 ST.pdf
# modified: Klaudt, Elmer J.,1956 ST.pdf
# modified: Klosterman, Mary J., 1978.pdf
# modified: Knutson, Sean, 2007 SD.pdf
# modified: Koons, Robert R., 1957.pdf
# modified: Kringstad, Justin J., 2007 SD.pdf
# modified: Kume, Jack, 1958 ST.pdf
# modified: Lammers, Heather N., 2007 SD.pdf
# renamed: Ackerman, Daniel J., 1971 ST.pdf -> Lassila, Pentti, 1968 ST.pdf
# modified: Lindberg, Connor; Putkonen, Jaakko, 2015.pdf
# renamed: Brouillard, Lee A., 1977 ST.pdf -> Listoe, Bruce K., 1955 ST.pdf
# renamed: Blum, Raymond L., 1957 ST.pdf -> Lockrem, Timothy M., 1980 ST.pdf
# renamed: Cook, Charles W., 1968 ST.pdf -> Mathison, David J., 1964 ST.pdf
# modified: Meldahl, Charles, 1962.pdf
# modified: Mikkelson, D.H., 1956 ST.pdf
# renamed: Johnson, Irwin S., 1957 ST.pdf -> Moe, Richard B., 1958 ST.pdf
# renamed: Olien, Benjamin, 1957 ST.pdf -> Monsebroten, Dale R. 1966.pdf
# modified: Murphy, Edward C., 1979 ST.pdf
# modified: Myerchin, Paul H., 1994.pdf
# modified: Nelson, Kelly, NA, SD.pdf
# modified: Nestaval, Jerry E., 1958 ST.pdf
# renamed: Englerth, E. J., 1958 ST.pdf -> Norby, Rodney D., 1967 ST.pdf
# modified: Olien, Benjamin, 1957 ST.pdf
# renamed: Smith, Louis D., 1968.pdf -> Olson, Bruce A., 1974 ST.pdf
# modified: Opitz, Emil, 2007 ST.pdf
# modified: Overmoe, Terry H., 1956 ST.pdf
# modified: Peterson, Robert T., 1958 ST.pdf
# renamed: Solheim, Dale, 1957 ST.pdf -> Pilatzke, Richard H., 1976 ST.pdf
# modified: Quigley, Micheal L., 1958 ST.pdf
# modified: Ramsey, Bruce, 1972 ST.pdf
# renamed: DeYaegher, Wilfred M., 1955 ST.pdf -> Randich, Philip G., 1958 ST.pdf
# renamed: Lockrem, Timothy M., 1980 ST.pdf -> Rasanen, Ryan; Smrekar, Allison; Jahraus, Paul 2014 SD.pdf
# modified: Redmond, John C., 1955.pdf
# modified: Reishus, Mark, 1958 ST.pdf
# modified: Remple, Gary A., 1987 ST.pdf
# modified: Ries, Adam J., 2010 SD.pdf
# modified: Roehrich, Robert D., 1957.pdf
# renamed: Peterson, Robert T., 1958 ST.pdf -> Ross, James D., NA.pdf
# modified: Russell, Ashley, NA, ST.pdf
# renamed: Garske, Jay, 1957 ST.pdf -> Salomon, Nena 1974 ST.pdf
# modified: Samson, Sherry D., 1995.pdf
# modified: Sandven, John E., 2016 ST.pdf
# modified: Saunders, Gary, 1960 ST.pdf
# modified: Schmit, Craig R., 1970 ST.pdf
# renamed: Quigley, Micheal L., 1958 ST.pdf -> Schofeild, R.G., 1957.pdf
# modified: Smith, Daniel, 2009 SD.pdf
# modified: Smith, Louis D., 1968.pdf
# modified: Smith, Louis D., 1970 ST.pdf
# modified: Snyder, Jeffrey K., 1992 ST.pdf
# renamed: Davidson, Jerry, NA, ST.pdf -> Solheim, Dale, 1957 ST.pdf
# modified: Solie, Kevin L., 2008 SD.pdf
# modified: Stancel, Steve G., NA.pdf
# modified: Thompson, Gary G., 1962 ST.pdf
# modified: Thomte, Dennis, NA, ST.pdf
# modified: Traynor, Terrance O. 1977 ST.pdf
# modified: Trobec, Seth W., 2009 SD.pdf
# modified: Walker, Daniel M., 1979 ST.pdf
# modified: Walsh, Michael W., 1956 ST.pdf
# modified: Wangerud, Kenneth W., 1973 ST.pdf
# renamed: Degenstein, Joel A., 1975 ST.pdf -> Waxvik, John N., 1964 ST.pdf
# modified: Worden, Anna K., 2007 ST.pdf
# modified: Zejdlik, Roger C., 1956 ST.pdf
为什么它决定将其中一些文件重命名为完全不同的文件名?任何给定重命名行中的两个文件都存在-例如,有一个名为Degenstein,Joel a.,1975 ST.pdf的文件和另一个名为Waxvik,John N.,1964 ST.pdf的完全不同的文件。但出于某种原因,它决定将其中一个重命名为另一个
无论是一次添加一个文件还是一起添加,都没有什么区别。发生什么事了
我已经使用git reset取消显示此时的更改。git是一个内容跟踪器,而不是文件跟踪器。Git没有重命名这些文件,而是说您重命名了这些文件,因为它们的内容非常相似
Git不是为跟踪二进制数据的变化而设计的,比如pdf编码的数据,所以你不能责怪它。当跟踪二进制数据的变化时,所有的赌注都是无效的,因为这不是git设计的目的。它设计用于跟踪纯文本源代码文件以实现版本控制。Git是一个内容跟踪器,而不是文件跟踪器。Git没有重命名这些文件,而是说您重命名了这些文件,因为它们的内容非常相似
Git不是为跟踪二进制数据的变化而设计的,比如pdf编码的数据,所以你不能责怪它。当跟踪二进制数据的变化时,所有的赌注都是无效的,因为这不是git设计的目的。它被设计用来跟踪纯文本源代码文件以实现版本控制。不要在git中读太多内容,说文件被重命名了。git中没有重命名操作;它只是在事后尝试确定,在git状态下,从先前提交的树到当前索引树的转换是否可能涉及移动/重命名文件;如果它认为是这样的话,它会说改名了 请记住,显示PDF时看到的内容与git处理PDF时看到的内容非常不同。PDF中的数据通常是经过压缩的,所以不太清楚文本是什么。从二进制的角度来看,很多内容都建立了文档的结构,而这些文件中的每一个都可能是相同的 所以git的启发法是混乱的。但问题是:这无关紧要。如果您查看实际的文件,则每个文件中都应该包含正确的数据。不过,如果你认为虚假的输出会分散你的注意力,我也不能责怪你。对于许多命令,您可以对重命名检测行为进行一些控制;我不知道一个内置的方式来抑制它的地位不幸的。但是有一个想法 对于git期望遇到的文件类型,重命名检测工作得非常好。当你存储像PDF这样的二进制文件时,你会破坏git的许多特性,因为这不是它优化的目的。通过使用git lfs,您可以使其表现得更好 这样做的主要目的是通过将git无法很好地压缩/区分的大型二进制文件移动到单独的大型文件存储中来限制核心repo的大小,只有在需要特定版本时才从该存储中下载该版本。相比之下,无论您签出什么,常规回购的克隆都必须复制每个文件的每个版本
但这里有一件很酷的事情:当你使用lfs时,core git认为它只是存储这些小lfs指针——lfs在必要时用来查找真实内容的占位符。在我的测试中,这些指针总是非常不同,除非文件被逐字节复制,否则它们不会被检测为重命名。不要在git中读太多文件被重命名。git中没有重命名操作;它只是在事后尝试确定,在git状态下,从先前提交的树到当前索引树的转换是否可能涉及移动/重命名文件;如果它认为是这样的话,它会说改名了 请记住,显示PDF时看到的内容与git处理PDF时看到的内容非常不同。PDF中的数据通常是经过压缩的,所以不太清楚文本是什么。从二进制的角度来看,很多内容都建立了文档的结构,而这些文件中的每一个都可能是相同的 所以git的启发法是混乱的。但问题是:这无关紧要。如果您查看实际的文件,则每个文件中都应该包含正确的数据。不过,如果你认为虚假的输出会分散你的注意力,我也不能责怪你。对于许多命令,您可以对重命名检测行为进行一些控制;我不知道一个内置的方式来抑制它的地位不幸的。但是有一个想法 对于t的文件 git希望遇到的类型,重命名检测工作得很好。当你存储像PDF这样的二进制文件时,你会破坏git的许多特性,因为这不是它优化的目的。通过使用git lfs,您可以使其表现得更好 这样做的主要目的是通过将git无法很好地压缩/区分的大型二进制文件移动到单独的大型文件存储中来限制核心repo的大小,只有在需要特定版本时才从该存储中下载该版本。相比之下,无论您签出什么,常规回购的克隆都必须复制每个文件的每个版本
但这里有一件很酷的事情:当你使用lfs时,core git认为它只是存储这些小lfs指针——lfs在必要时用来查找真实内容的占位符。在我的测试中,这些指针总是非常不同,除非文件是逐字节复制的,否则它们不会被检测为重命名。正如其他两个答案所指出的,问题是Git正在进行相似性分析,并猜测这些文件可能已被修改和重命名。这种错误的匹配是无害的,尽管一开始有些令人担忧 完整的细节相当复杂,但简短的版本是git status从提交头到索引运行git diff,启用了重命名检测,给出了50%相似的内部默认值。由于PDF文件往往具有大的重复二进制块,其64字节块将散列到同一个插槽中,因此任何两个PDF文件被认为至少50%相似的可能性是。。。好吧,高是太强了:不低会更准确。在上面的示例中,您在128个文件中找到了30个,或者在5个文件中有1个文件得到了50%以上的错误匹配 如果这些文件不是PDF文件,相似性分数可能会有用。但是,限制为200个未配对文件
在git status运行HEAD vs index diff之后,它会运行第二个index vs files diff。由于在这里没有意义,因此没有启用重命名检测。我提到它只是因为一开始并不明显,git status所做的是运行两个git差异。正如其他两个答案所指出的,问题是git正在进行相似性分析,并猜测文件可能已被修改和重命名。这种错误的匹配是无害的,尽管一开始有些令人担忧 完整的细节相当复杂,但简短的版本是git status从提交头到索引运行git diff,启用了重命名检测,给出了50%相似的内部默认值。由于PDF文件往往具有大的重复二进制块,其64字节块将散列到同一个插槽中,因此任何两个PDF文件被认为至少50%相似的可能性是。。。好吧,高是太强了:不低会更准确。在上面的示例中,您在128个文件中找到了30个,或者在5个文件中有1个文件得到了50%以上的错误匹配 如果这些文件不是PDF文件,相似性分数可能会有用。但是,限制为200个未配对文件
在git status运行HEAD vs index diff之后,它会运行第二个index vs files diff。由于在这里没有意义,因此没有启用重命名检测。我之所以提到它,只是因为一开始并不明显,git status所做的就是运行两个git Diff。但是所讨论的文件的内容完全不同,100%。例如,Baugh,Gerald文件被列为重命名为Alkofer,Anton文件,但两者分别存在,具有不同的文件名,其内容完全不同。下面是一些md5校验和。4d64c0f9402e36fd88d5ada5106a201b,杰拉尔德R.包,1956 ST.pdf;de1884ef318688b916a57c0b1d758449阿尔科弗,安东R.,1958 ST.pdf。当这两个文件在任何方面都不相同时,它是如何检测到它们是相同的呢?当您在adobe reader之类的工具中查看这些文件时,它们可能看起来不一样,但它们的二进制表示形式可能相似。尝试对文件执行diff或git diff。在这种情况下,MD5校验和几乎毫无意义。文件之间可能有99%的重叠,它们的MD5校验和将完全不同。请注意,git可能并没有说这些文件完全相同,但它认为它们非常接近,以至于您已经重命名了它们。这并不是100%的不同——事实上,您可以让git告诉您,它认为它们运行git diff时有多大的不同,它将显示相似性索引。这可能是因为PDF嵌入字体中的二进制数据非常相似,而不是您看到的内容.Hrm。当我运行git diff时,它没有显示任何类型的相似性索引——它只是显示所有文件都不同。我需要给它输入一些额外的参数吗?我在谷歌上搜索到了很多模糊的文档,没有任何例子。注意:我使用的是git 1.8.3.1,因为RHEL就是这么做的。它可能会检测到文件是二进制的,就像linux diff工具一样,所以它不想告诉你它们是如何
伊弗。这种差异看起来像胡说八道,人类无法理解。如果您真的想看到差异,可以使用cmp或vbindiff。如果你是emacs的人,你也可以使用它。我建议只添加文件,然后忘记它。Git不会覆盖您的文件,即使它认为存在重命名,所以您无需担心。如果你真的很偏执,把你的数据复制到某个地方,然后把git忘在一起。但是这些文件的内容完全不同,100%。例如,Baugh,Gerald文件被列为重命名为Alkofer,Anton文件,但两者分别存在,具有不同的文件名,其内容完全不同。下面是一些md5校验和。4d64c0f9402e36fd88d5ada5106a201b,杰拉尔德R.包,1956 ST.pdf;de1884ef318688b916a57c0b1d758449阿尔科弗,安东R.,1958 ST.pdf。当这两个文件在任何方面都不相同时,它是如何检测到它们是相同的呢?当您在adobe reader之类的工具中查看这些文件时,它们可能看起来不一样,但它们的二进制表示形式可能相似。尝试对文件执行diff或git diff。在这种情况下,MD5校验和几乎毫无意义。文件之间可能有99%的重叠,它们的MD5校验和将完全不同。请注意,git可能并没有说这些文件完全相同,但它认为它们非常接近,以至于您已经重命名了它们。这并不是100%的不同——事实上,您可以让git告诉您,它认为它们运行git diff时有多大的不同,它将显示相似性索引。这可能是因为PDF嵌入字体中的二进制数据非常相似,而不是您看到的内容.Hrm。当我运行git diff时,它没有显示任何类型的相似性索引——它只是显示所有文件都不同。我需要给它输入一些额外的参数吗?我在谷歌上搜索到了很多模糊的文档,没有任何例子。注意:我使用的是git 1.8.3.1,因为RHEL就是这么做的。它可能检测到文件是二进制的,就像linux diff工具一样,所以它不想确切地告诉你它们之间的区别。这种差异看起来像胡说八道,人类无法理解。如果您真的想看到差异,可以使用cmp或vbindiff。如果你是emacs的人,你也可以使用它。我建议只添加文件,然后忘记它。Git不会覆盖您的文件,即使它认为存在重命名,所以您无需担心。如果你真的很偏执,把你的数据复制到某个地方,然后把git忘在一起。@DanLowe git状态不尊重这个设置,是吗?@DanLowe-文档上说它只被Cellar命令所尊重,而不是所有Cellar都尊重它。“在我的测试中,状态不尊重它。@MarkAdelsberger Ok,删除了我的评论,以避免传播misinformation@DanLowegit状态并不尊重这种设置,是吗?@DanLowe——文档中说,它只受到Cellar命令的尊重——而不是所有Cellar命令的尊重。“在我的测试中,状态不尊重它。@MarkAdelsberger Ok,删除了我的评论,以避免传播错误信息