Git文件歷史追蹤問(wèn)題

有很多時(shí)候,git追蹤某一個(gè)文件的變化歷史和軌跡,是非常重要的,不管是代碼還是文檔。這里主要說(shuō)文檔。但是我們的筆記、文檔,總是喜歡改名和轉(zhuǎn)移目錄之類行蹤不定,那么一旦有這些改動(dòng),git還能追蹤嗎?

文件改名 rename

git倉(cāng)庫(kù)實(shí)際上對(duì)文件改名這個(gè)問(wèn)題是比較忌諱的,應(yīng)當(dāng)說(shuō)是盡量避免的。因?yàn)槿绻挥锰厥馓幚恚拿骻it只會(huì)認(rèn)為你刪了這個(gè)文件,又新建了另一個(gè)文件。

如果你在系統(tǒng)里面手動(dòng)把一個(gè)文檔1.txt改成了2.txt,那么這時(shí)候輸入git status只會(huì)看到1.txt被刪除,新增加文件2.txt
同樣的,命令行里用mv 1.md 2.md改名,也是同樣的效果。
要保持這個(gè)文件歷史記錄不斷的話,正確做法是:

git mv 1.txt 2.txt

這樣再用git status查看就會(huì)看到,識(shí)別為renamed: 1.txt -> 2.txt。它的歷史記錄就沒(méi)有斷。

文件移動(dòng)

有時(shí)候會(huì)把文件移動(dòng)到另一個(gè)文件夾或者某個(gè)子文件夾,但是git卻認(rèn)為你是刪了一個(gè)而新建了另一個(gè)。

這是因?yàn)楹透拿粯?,只要是在git命令之外移動(dòng)的,git就識(shí)別不到。
所以,這里也要用git mv命令來(lái)移動(dòng)。

git mv 1.txt ./src/1.txt

這個(gè)時(shí)候在查看git狀態(tài)就會(huì)發(fā)現(xiàn),顯示為renamed: 1.txt -> src/1.txt

文件覆蓋

這個(gè)問(wèn)題邏輯要復(fù)雜點(diǎn):有時(shí)候我們需要批量抓取網(wǎng)上的一些資源到這個(gè)目錄里面,有些是重復(fù)的內(nèi)容一樣的,有些卻是新的,還有些是網(wǎng)上刪除了的,那么我們想要網(wǎng)上抓取的和本地的同步,應(yīng)當(dāng)怎么辦呢?

雖然這個(gè)方法不嚴(yán)謹(jǐn),但是非常簡(jiǎn)單有效:只要這些東西體積不是很大,那么就可以完全刪除本地現(xiàn)有的文件,然后再把新抓取的保存到本地。
這個(gè)時(shí)候就是考驗(yàn)git的追蹤識(shí)別能力了。
經(jīng)過(guò)一系列試驗(yàn)發(fā)現(xiàn):

  • 首先不能用git rm刪除文件,如果用了它那么不管怎么做,它都會(huì)知道你刪除了文件,而我們要做的是讓它誤以為沒(méi)有刪除。
  • 如果文件位置和名字沒(méi)變,內(nèi)容也沒(méi)變,那么只要你沒(méi)有add或commit,即使新生成的文件的創(chuàng)建日期和修改日期都變化了,git status也不會(huì)顯示任何變動(dòng)。
  • 如果文件位置和名字沒(méi)變,內(nèi)容變化了,只要沒(méi)add或commit,那么git status只會(huì)告訴你modified 某文件
  • 如果文件位置或名字變了,那么,git完全不知道。會(huì)認(rèn)為你刪除了老的,建了新的。像上面重命名的問(wèn)題一樣。這時(shí)候如果你還想要保持這個(gè)文件的追蹤歷史,要不你就盡量避免改名字,要不就想把法用git mv命令告知git,但是這個(gè)邏輯比較麻煩,尤其是涉及文件比較多的時(shí)候。所以我一般選擇避免改名字,或干脆就斷了追蹤。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 16,212評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 4,162評(píng)論 0 11
  • GIT分布式版本控制系統(tǒng)最佳實(shí)踐 這篇文章來(lái)自于老男孩教育高級(jí)架構(gòu)師班12期的徐亮偉同學(xué)。 首先感謝老男孩架構(gòu)師班...
    meng_philip123閱讀 3,819評(píng)論 4 36
  • 心習(xí)錄 …我在反省,昨天這個(gè)對(duì)話場(chǎng)景中,我的輕浮與狹隘,這不是敦厚。借事修人,人的弱點(diǎn)是自己不自知的地方,正是需要...
    咸叔說(shuō)閱讀 295評(píng)論 0 0
  • 天氣不錯(cuò),第一天的暑假,卻沒(méi)什么干勁。寫了一點(diǎn)草稿,沒(méi)有什么實(shí)質(zhì)上的進(jìn)展,暑假的辦公室也是有些熱鬧,本來(lái)我以為只會(huì)...
    悟空金月餃子閱讀 94評(píng)論 0 0

友情鏈接更多精彩內(nèi)容