簡體   English   中英

為什么git在添加時重命名這些文件?

[英]Why is git renaming these files on add?

我有一個包含一堆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取消了這些更改。

不要對git讀太多東西說文件已重命名。 git中沒有“重命名”操作。 實際上,它只是試圖確定從先前提交的樹到當前索引樹的轉換(在git status的情況下)是否可能涉及要移動/重命名的文件; 如果是這樣,則說“重命名”。

請記住,顯示PDF時看到的內容與git處理PDF時看到的內容非常不同 PDF中的數據通常會被壓縮,因此其中的文本並不是很明顯。 從二進制的角度來看,很多“內容”都建立了文檔的結構,並且對於每個文件來說都是相同的。

因此,git的啟發式方法很混亂。 但這就是問題:沒關系。 如果查看實際文件,則每個文件中都應包含正確的數據。 不過,如果您認為虛假輸出會分散您的注意力,我也不能怪您。 對於許多命令,您可以斷言對重命名檢測行為的某些控制;例如: 不幸的是,我不知道一種“內置”方式來抑制它的status 但是有一個主意...

對於git可能遇到的文件類型,重命名檢測效果很好。 當您存儲二進制文件(如PDF的文件)時,您會破壞git的許多功能,因為這不是針對其進行優化的。 您可以使用git lfs使其表現更好。

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

這樣做的主要目的是通過將大型二進制文件(git無法很好地壓縮/比較)移動到單獨的“大型文件存儲”中,從而限制了核心倉庫的大小,只有在需要特定版本時才從該版本中下載版本版。 (相比之下,無論您要檢出什么內容,“常規”存儲庫的克隆都必須復制每個文件的每個版本。)

但這是一件很酷的事情:使用lfs時,核心git會“思考”,只是存儲這些小小的“ lfs指針”-lfs在必要時用來查找實際內容的占位符。 在我的測試中,這些指針總是足夠不同,以至於除非將文件逐字逐個復制,否則不會將它們檢測為“重命名”。

Git是內容跟蹤器,而不是文件跟蹤器。 Git沒有重命名文件,這是因為的文件內容如此相似,因此重命名了文件。

Git並不是為了跟蹤二進制數據的變化而設計的,例如pdf編碼的數據,因此您不能真正怪罪它。 當跟蹤二進制數據的變化時,所有的賭注都是關閉的,因為這不是git設計的目的。 它旨在跟蹤(純文本)源代碼文件,以進行版本控制。

正如其他兩個答案所指出的那樣,問題在於Git正在進行相似性分析,並猜測文件可能已被修改和重命名。 這種錯誤的匹配是無害的,盡管起初有些令人震驚。

完整的細節非常復雜(請參閱git log --follow <filename>的工作方式的 回答 ),但是簡短的版本是git status從提交(HEAD)到索引運行git diff ,並啟用了重命名檢測(將內部默認設置為“ 50%相似”)。 由於PDF文件傾向於具有大的重復二進制塊,其64字節的塊將散列到同一插槽,因此,任何兩個PDF文件被視為“至少相似度為50%”的可能性是……“高”太強了:“不低”會更准確。 您在上述示例中的128個中有30個命中,或者5個文件中有1個以上的錯誤匹配率達到50%以上。

如果這些不是PDF文件, 相似度評分可能會很有用。 但是您不能在git status關閉重命名檢測:它始終處於打開git status ,最大限制為200個未配對的文件。

(后git status運行HEAD -vs指數差異,它運行第二,指數-VS-文件,DIFF。一個啟用重命名檢測,因為在這里沒有任何意義。我只提它,因為它不是很明顯,首先, git status要做的是運行兩個git diff 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM