我有一个包含大量PDF文件的git存储库。在对其中一些运行OCR之后,我运行git add .
来获取更改并进行分级。之后,git status
看起来像这样:
# 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 :(得分:4)
不要过多地读取git,说文件已重命名。在git中没有“重命名”操作这样的东西;事实上,它只是试图确定从先前提交的树到当前索引树(在git status
的情况下)的转换是否可能涉及移动/重命名的文件;如果它这么认为,它会说“重命名”。
请记住,当您在处理PDF时,git看到的内容与您在显示PDF时看到的内容非常不同。 PDF中的数据通常是压缩的,因此不太明显是什么文本。从二进制角度来看,很多“内容”都建立了文档的结构,而且每个文件的结构都可能相同。
所以git的启发式方法很混乱。但事情就是这样:没关系。如果查看实际文件,它们每个都应该包含正确的数据。如果你认为虚假输出分散了注意力,我仍然不能责怪你。对于许多命令,您可以对重命名检测行为进行一些控制;不幸的是,我不知道为status
压制它的“内置”方式。但有一个想法......
对于git期望遇到的类型的文件,重命名检测非常有效。当您存储二进制文件(如PDF)时,您会击败许多git的功能,因为这不是它的优化。使用git lfs
可以使其表现得更好。
这样做的主要目的是通过将大型二进制文件(git无法压缩/差异很好)移动到一个单独的“大文件存储”来限制核心存储库的大小,您只需从中下载一个版本需要特定版本。 (相比之下,“常规”仓库的克隆必须复制每个文件的每个版本,无论你要检查什么。)
但是这很酷:当你使用lfs时,核心git“认为”它只是存储这些小的“lfs指针” - lfs用于在必要时查找真实内容的占位符。在我的测试中,那些指针总是足够不同,以至于它们不被检测为“重命名”,除非文件按字面逐字节复制。
答案 1 :(得分:1)
Git是一个内容跟踪器,而不是文件跟踪器。 Git没有重命名文件,它说你重命名了文件,因为它们的内容非常相似。
Git并非设计用于跟踪二进制数据的更改,例如pdf编码的数据,因此您无法真正责怪它。当跟踪对二进制数据的更改时,所有投注都会关闭,因为这不是git的设计目标。它旨在跟踪(明文)源代码文件以进行版本控制。
答案 2 :(得分:1)
正如其他两个答案所指出的那样,问题是Git正在进行相似性分析并猜测文件可能已被修改和重命名。这种错误的匹配是无害的,虽然起初有点令人担忧。
完整的详细信息非常复杂(请参阅my answer到how does git log --follow <filename> work?),但简短版本是git status
从提交(HEAD)到索引运行git diff
,打开重命名检测(给出内部默认值&#34; 50%相似&#34;)。因为PDF文件往往具有大的重复二进制块,其64字节块将散列到相同的槽,所以考虑任何两个PDF文件的机会&#34;至少50%相似&#34;是......好吧,&#34;高&#34;太强了:&#34;不太低&#34;会更准确。在上面的示例中,您正在击中128个中的30个,或者只有超过1个的5个文件正在获得错误的50%+匹配。
如果 这些不是PDF文件,则相似性得分可能非常有用。但you can't turn off rename detection in git status
: it's always on,限制为200个未配对文件。
(在git status
运行HEAD
- vs-index差异之后,它运行第二个索引与文件差异。那个不有重命名检测启用,因为它在这里没有意义。我之所以提到它只是因为它起初并不明显,git status
所做的就是运行两个git diff
。)