2017-05-16 160 views
1

我有一个包含一堆PDF文件的git存储库。在运行一些OCR之后,我运行git add .来应对变化并将它们分级。在此之后,git status看起来是这样的:为什么git将这些文件重命名为add?

#  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来取消此时的更改。

+0

@DanLowe'git status'不尊重那个设置,但是,它是这样吗? –

+0

@DanLowe - 文档所说的是*它只被瓷器命令所尊敬 - 并不是它被所有的瓷器所尊敬。在我的测试中,“status”并不尊重它。 –

+0

@MarkAdelsberger好的,删除了我的评论,以避免传播错误信息 –

回答

4

不要在git中读太多,说一个文件被重命名。在git中没有这样的“重命名”操作;它只是试图在事实之后确定从先前提交的树到当前索引树的转换(在git status的情况下)是否可能涉及文件被移动/重命名;如果它这样认为,它说“重命名”。

请记住,显示PDF时显示的内容与内容很不同,因为git在处理PDF时会看到它。 PDF中的数据通常是压缩的,所以文本不是那么明显。从二进制角度来看,很多“内容”都建立了文档的结构,而这对于每一个文件来说都是一样的。

所以git的启发式是困惑的。但是事情就是这样:没关系。如果你看看实际的文件,他们应该都有正确的数据。不过,如果你认为虚假的输出令人分心,我不能责怪你。对于许多命令,您可以对重命名检测行为进行一些控制;不幸的是,我不知道“内置”方式来抑制status。但有一个想法...

对于git类型的文件预计遇到,重命名检测工作得很好。当你存储二进制文件(如PDF文件)时,你击败了许多git的功能,因为这不是它优化的功能。您可以使用git lfs使其表现更好。

https://git-lfs.github.com/

这样做的主要目的是通过移动大的二进制文件(其GIT中无法压缩/ DIFF孔)到一个单独的“大文件存储”以限制芯回购的大小,从中只有在需要特定版本时才下载版本。 (相比之下,“常规”回购的克隆必须复制每个文件的每个版本,而不管您检出的是什么。)

但是这里很酷:当你使用lfs时,core git“认为”它只是存储这些小的“lfs指针” - 当需要时lfs用来查找真实内容的占位符。在我的测试中,这些指针是总是不同,它们不会被检测为“重命名”,除非文件字面复制字节的字节。

1

Git是一个内容跟踪器,而不是文件跟踪器。 Git没有重命名这些文件,而是说重命名了这些文件,因为它们的内容非常相似。

Git没有被设计用于跟踪二进制数据的变化,比如pdf被编码的数据,所以你不能指责它。当跟踪二进制数据的变化时,所有投注都关闭,因为这不是git设计的目的。它旨在跟踪(明文)源代码文件的版本控制目的。

+0

但是有问题的文件的内容完全不同,100%不同。例如,“Baugh,Gerald”文件被列为重命名为“Alkofer,Anton”文件,但两者都单独存在,具有不同的文件名,并且其内容完全不同。这里有一些md5校验和。 (4d64c0f9402e36fd88d5ada5106a201b Baugh,Gerald R.,1956 ST.pdf; de1884ef318688b916a57c0b1d758449 Alkofer,Anton R.,1958 ST.pdf)。当它们以任何方式不相似时,如何将这两个文件检测为相同? –

+0

当你用adobe阅读器查看文件时,它们可能看起来不一样,但它们的* binary *表示形式可能相似。尝试在文件上执行'diff'(或'git diff')。在这种情况下,MD5校验和几乎没有任何意义。你可能有99%的文件重叠,他们的MD5校验和会完全不同。请注意,git可能并不是说这些文件*完全相同,但它认为它们已经足够接近以至于已经将它们重命名为 – mwm314

+1

这不是完全不同 - 事实上,您可以让git告诉您它认为它们有多不同(运行'git diff',它会显示'相似性索引')。这可能是由于PDF中的二进制数据(例如,嵌入的字体)与您“看到”的内容非常相似。 –

1

由于两个其他的答案中指出,问题是,Git是做一个类似的分析和猜测文件可能已被修改,并更名为。这种错误的匹配是无害的,尽管起初有些令人担忧。

全部细节相当复杂(参见my answerhow does git log --follow <filename> work?),但短期的版本是git status运行从提交(HEAD)到索引git diff,用重命名检测开启(给予50%相似的”内部默认“)。由于PDF文件往往有大量重复的二进制块,其64字节的块会散列到同一个槽中,因此任何两个PDF文件被认为“至少有50%相似”的可能性是......好,“高”太强:“不低”会更准确。在上面的示例中,您打到128个中的30个,或者5个文件中仅有1个获得错误的50%+匹配。

相似度得分可能有用如果这些不是PDF文件。但you can't turn off rename detection in git status: it's always on,最多200个未配对的文件。

git status运行的HEAD -Vs指数差异后,它运行第二,指数-VS-文件,DIFF,这一个不有重命名启用检测,因为它使这里没有任何意义。我只提到它因为它起初并不明显,git status所做的就是运行两个git diff s)。

相关问题