假設要你做一個版本控制,你會怎麼做?
跟著這個文章一起做,做完後你就會發現 Git 的概念其實很簡單,沒有你想的那麼複雜!
動手做一做
假設你有一些檔案長這樣:
1 | code_v1 |
假設 code_v1 有更新時,你應該會這樣做:
1 | code_v2 |
隨著更新越來越多時,最後可能變成這樣:
1 | code_v9 |
當檔案變成這樣子時,會有一個問題:你怎麼知道哪一個 code 是對應到哪一個 note?
如果這些檔案是一個程式的話,那麻煩就會很大。如果你沒有用對應的 code 去搭對應的 note,你的程式可能就會出錯。
那有沒有什麼更好的做法呢?
有阿,每次只要一更新,我就開一個「新的資料夾」來儲存所有最新的檔案不就 OK 了嗎:
1 | -- v1(資料夾) |
很多次的更新後…
1 | -- v1(資料夾) |
這樣就解決了「相依性」的問題。現在不管是哪一個資料夾內的 code 跟 note,我們都能確保他一定可以正常運作。
現在另外一個問題來了,如果有些檔案我不想要加入版控呢?
也不用想得太複雜啦,既然我們會把要做版控的檔案都放到一個資料夾中,那只要反過來思考就好,我們不想要做版控的檔案,就「不要放到資料夾」中:
1 | -- v1(資料夾) |
很多次的更新後…
1 | -- v1(資料夾) |
所以 abc 永遠就只會是 abc,不管做了幾次更新,他都與我們的版控沒有關係。
修但幾勒!
在你準備洗洗睡之前,還有最後一個問題又蹦出來了:如果多人協作的話要怎麼辦?
沒錯,我們的精心製作的版控在「只有一個人的情況下」,可以說是完美於缺的;但如果不是呢?
想一下這個情境:
1 | -- v1 |
PeaNu 對 v1 做了一點更新,所以建立了一個新的資料夾。
1 | -- v2 |
PPB 對 v1 做了一點更新,所以建立了一個新的資料夾。
1 | -- v2 |
聰明的你知道這個時候就會有問題了,因為 PeaNu 跟 PPB 的檔案名稱都是 v2,會有重複命名的問題。
聰明的你又知道,既然這樣會有重複命名的問題,那我每一次都用「亂數」來幫資料夾命名就好了呀!
1 | -- kjdanskdqwwe |
PeaNu 對 kjdanskdqwwe 做了一點更新,所以建立了一個新的資料夾。
1 | -- njkdnkngwf |
PPB 對 kjdanskdqwwe 做了一點更新,所以建立了一個新的資料夾。
1 | -- 4oy904ue9tjwr |
所以最後的情況會是這樣:
1 | -- kjdanskdqwwe |
好啦,現在確實解決了重複命名的問題,但我現在是要怎麼知道哪個是最新的版本,還有每個版本的順序?
別急,我們在開一個檔案用來做記錄不就好了嗎:
1 | -- kjdanskdqwwe |
恭喜你,現在你的版控不論是單人或多人協作都能平平安安,而且還可以選擇那些東西要做版控,哪些不要。
總結
最後來複習一下整個流程吧:
- 每當發生更新,就建立一個新的資料夾
- 不要做版控的檔案,就不要放到資料夾
- 為了避免命名衝突,每一個資料夾都會用亂數來命名
- 為了知道哪個版本最新?版本的順序?我們建立了兩個檔案來做紀錄
不知道你有沒有發現,其實這就是「Git」在幫你做的事情!
雖然背後的原理不完全是這樣子,但只要用這種方式下去思考,我保證你不再覺得 Git 有什麼困難的。