※ 引述《denru01 (阿儒)》之銘言:
: 其實已經用了GIT一陣子了,
: 常用的功能與指令也學的差不多,
: 應該可以說"懂的怎麼用GIT的功能",
: 但我一直覺得我只是在亂用一通,
: 實際應用上一團糟XD
: 所以來發文請教各位前輩遇到下述的這些問題,
: 都是怎麼處理的.
: 1. 檔案裡面有實驗的參數或是路徑.
: 比方說,
: libraryPath = '/u/homes/abc/xxx';
: speedNow = 3;
: 其它東西基本上是不變的,
: 只是這個路徑會隨著用不同電腦不同而不同,
: 而speedNow是實驗參數,
: 可能會試用不同的參數,
: 看跑出來的結果如何.
: 即使其它地方不動,
: 只要這兩個修改了,
: 又要重新commit,
: 然後另一台電腦如果pull就毀了.
: 目前試過:
: a. 單獨使用一個.ini file來存這些參數,
: 但如果這個.ini file有commit進去,
: 而又會不斷的修改內容,
: 這件事就又發生了.
: b. 寫一個.ini.example,
: 然後要用的時候複製example成.ini,
: 但不commit這個.ini.
: 但問題是,
: 萬一要加參數的話,
: 就要改很多個檔案,
: 也可能會出現.ini.example與實際使用的.ini不一致的情況.
個人設定參數寫在一個文件,然後忽略它。
如果有用小烏龜,可以試試 skip worktree
http://blog.miniasp.com/post/2014/12/23/Git-Advanced-Assume-Unchanged-Skip-worktree.aspx
: 2. Commit的頻率與log撰寫.
: 目前一直抓不到commit的節奏,
: 到底是改一個function就要commit呢?
: 還是完整的完成這個feature再commit呢?
: 有看過一個說法是說絕對不要commit不會work的東西上去,
: 但有時要改到會work要改很多地方,
: 萬一中間出事就沒救了.
: 加上我log一直都是寫的很完整,
: 都要dif一下, 一一看改了什麼,
: 再寫進log,
: 導致後來都很懶的commit,
: version control型同虛設.
: 比方說如果這次commit改了很多個檔案,
: 是要一一說每個檔案改了什麼嗎?
做之前以一個任務為名稱切一個本地分支,出去吃飯就commit,廁所就commit,想到就commit,做完squash回去,或是rebase整理完在merge回去。
分支常常create跟merge也是git很鼓勵的事,也是git才能做到的
: 3. 大檔案的存在.
: 跑程式需要一些input,
: 有些input非常巨大,
: 但沒有這些檔案又無法跑.
: 現在的做法就是,
: 只commit code檔,
: 這些input單獨包成一包,
: 每個有使用code的地方都傳一份,
: 如果input有修改,
: 就要重新打包,
: 重新上傳所有的位置.
: 非常沒有效率,
: 而且有時會忘記通知那人input data有更新了...
可以試試submodule…把大檔案單獨一個repo去管。
: 4. 改名與檔案結構改變.
: 有時code寫到後來會變的很亂,
: 所以會想把檔案重新分類一下,
: 並改個名,
: 這個就不太知道有什麼簡單的方法可以達成了...
改名git有支援,如果你不改內容或是只改一兩行(有實驗過),add之後會自動辨識成rename
show log可以包含有改名的歷史,這部分我只在小烏龜用過,bash裡面不知道…
: 5. Log寫錯或是忘記commit某些檔案.
: 有時改了很多個檔案,
: 但忘記commit某一些改過的檔案,
: 或是Log寫錯.
: 麻煩有經驗的前輩指導一下,
還沒push上去之前可以修改前一次commit
或是rebase去整理。
push上去的話…我就不知道了
: 謝謝~