你的git專案不小心commit了別人的git該怎麼辦
前言
git是一項非常好用的版本控制工具,可是其背後的運作原理可是複雜得很,要如何用的好又是一門學問了。
有時候我們git化一個專案的時候,很有可能你使用的一些模組、library已經有被版本控制了,這個時候我們將整個資料夾git化之後很開心的就推上了自己的git repository去了
會發生什麼事情?
當你的同事將git專案clone下來之後繼續工作,直到他發現了某個重要的資料夾消失了,這位可憐的同事一頭霧水的開始去找git repository發現那個資料夾內根本是空的!!最後才發現自己的專案內還有另一個git存在
為何會這樣?
首先你必須要知道git的 子模組 (Submodules) 以下我引述git的文件
這裡有一個例子。假設你在開發一個網站,並提供 Atom 訂閱(Atom feeds)。你不想自己編寫產生 Atom 的程式,而是決定使用一個 Library。你可能必須從 CPAN install 或者 Ruby gem 之類的共用庫(shared library)將那段程式 include 進來,或者將原始程式碼複製到你的專案樹中。如果採用包含程式庫的辦法,那麼不管用什麼辦法都很難對這個程式庫做客製化(customize),部署它就更加困難了,因為你必須確保每個客戶都擁有那個程式庫。把程式碼包含到你自己的專案中帶來的問題是,當上游被修改時,任何你進行的客製化的修改都很難歸併(merge)。
所以git偵測到資料夾內還有其他的git專案就會將他認定為submodule所以不會將他加進stage內被commit起來。
該如何解決
- 加入submodule
- 自己掌控 // 反正我只是要他現在被我加入整個git專案內
submodule教學就不在此討論,網路上就已經有很詳細的教學了
此時我們只要將資料夾內的.git資料夾刪除
rm -rf /project/example/.git
將資料夾從stage移除
git rm --cached /project/example
重新加入stage
git add --all
commit
git commit
如此一來我就將沒被commit的資料夾重新commit進我們的專案了