MontyPan / T-Chou

殺人放火金腰帶,修橋補路無屍骸(?)
0 stars 1 forks source link

Task-2:你覺得該怎麼用 .gitignore? #3

Closed MontyPan closed 5 years ago

MontyPan commented 5 years ago

這是一個多問多有事的步調 :dancing_women:

請直接在這個 issue 回答這個問題,然後再次強調:

然後預防性先補一刀:這 task 跟程式教學是有關的,問題是你有沒有那個緣份撐到有關聯的那一天 :scream:

cwchou2016 commented 5 years ago

個人認為 .gitignore 的使用時機:

  1. 避免與安全相關的檔案 (例如連結資料庫的帳號、密碼,或是 Credential 的設定檔等) 不小心被 push 到公開的頁面。
  2. 排除與程式碼相關的檔案 (例如執行程式的暫存檔)。因為這些檔案沒有追蹤的必要。

目前只想到這兩個。

MontyPan commented 5 years ago

嗯哼... 嗯哼...... (參見電影《康斯坦汀:驅魔神探》撒旦登場表情)

我是覺得以你的程式經驗,只講出這幾個實在太...... 偷懶了。所以呢, 我本來不想用這招的 這個 task 還沒完(而且會沒完沒了 :triumph: ):

需求追加

反駁不一定得是正面迎擊,如果要挑戰「因為 A 所以會得到 B」這句話,那能夠讓「聽你在唬爛,A 根本不會發生」成立也算是(實務層面的)反駁成功。

另外,如果你覺得「我上一個回答無懈可擊」以至於這個需求追加根本是緣木求魚,那我可以拿 LP 當賭注一定有辦法反駁,因為實務上我的確就沒 follow 你的觀點,所以至少存在一個答案。

然後再次強調:

喔對,如果是別人的話,那這樣的回答就可以 close task-2 了(我彷彿聽到遠處傳來的咒罵聲 :hear_no_evil: )

Bewared

不小心被 push 到公開的頁面。

這句話是有問題的。首先,你的 repo 可能永遠就只存在在你的電腦上(對,即使沒有要 team work 還是值得用 git)(想不想追加 Task-3 [奸笑])。再者,你用到的 GitHub 可以算是特例,過半數的商業性質軟體開發,程式碼都不會是 public 的、GitHub 也有提供 private repo 的服務(或著說,那才是他的本業)

另外:

還有,如果 task 之間沒有互相干擾的關係(例如現在的 #1 跟 #3 是完全獨立),請盡量保持平行處理。現在你的程式還很簡單,我不用 花大腦 花太多時間也看得完,所以幾乎可以馬上有 feedback,以後就難說了。

cwchou2016 commented 5 years ago
  1. 避免與安全相關的檔案 (例如連結資料庫的帳號、密碼,或是 Credential 的設定檔等) 不小心被 push 到公開的頁面。
  2. 排除與程式碼相關的檔案 (例如執行程式的暫存檔)。因為這些檔案沒有追蹤的必要。

其實只為了這兩個原因,跟本不需要用到 .gitignore。因為在 git add 的時候,就知道這些檔案不需要被追蹤,不要加就沒事了。平常不要 手賤git add . 就不會追蹤到不想追蹤的檔案。

真正的原因是 潔癖。因為使用 git status 的時候,看到太多 untracked files 會覺得心理很不舒服,把這些檔名加入 .gitignore 之後 git status 看起來就很清爽。

另外,因為有些程式碼執行完之後的暫存檔檔名跟原本檔案的 檔名極為相似 ﹙例如:python2 的 .py 執行之後會產生 .pyc﹚,由於只有副檔名不同,為了避免在 git add 手殘 加錯檔案,以及避免 commit 完用 git status 看到幾乎一樣的檔名還在 untracked files 裡面,精神耗弱時 有時會分不清楚就自己嚇自己的情況。把這類型的檔案用 .gitignore 藏起來比較保險。

Murmur

我真的想不出來了~~~~。拜託饒了我好嗎… QQ

MontyPan commented 5 years ago

這不是饒不饒的問題(有設 deadline 才需要考慮饒命於否),而是你有沒有把他當成習慣的問題。

先回到你的「回答」。

從論點攻防的角度,這是一個無效的回答 (當然,如果是台灣談話性節目,那可能就會有人起立鼓掌) 。因為即使你成功論證了,你推翻的也不是你自己的論調,而是這個題目。你幾乎每一句都在說「其實只是為了方便,不然 .gitignore 是不需要的」,而不需要的原因跟「安全相關的檔案」、「與程式碼無關的檔案」沒有直接關係...... 更嚴格講是「替換成其他名詞(檔案)也成立」的 pattern。所以即使你站得住腳,你也會倒打自己一把:「你的兩個答案其實都是一樣的事情」(是說本來就是要你自己打自己 XD)

好,這邊先岔題出去講一個事情,就我簡單的查證的結果,.pyc 應該不是「執行」的結果,而是「compile」的結果,你會有這種錯覺是因為執行之前一定要先經過 compile。(這點跟 Java 一樣,都是先 compile、實際執行是 interpreter,這個除非你要念資訊系,不然有印象就好)所以那也不是什麼「執行程式的暫存檔」,甚至我可以跟你賭 50 元(對不起,我現在身家就這麼多),python 一定也有「不執行程式、純粹 pre-compile」的機制。

延續這個話題,那送你一個可以反駁成功的論點是:「那就不要讓 Python 把生出來 .pyc 放在 repo 裡面阿笨(暫存檔更是如此)」。當然實務上我們為了管理方便,通常還是會放在一起,只是不會 笨到 讓他跟 source code 在同一個目錄結構下。

再回到你的答案上。

要推翻題目不是不行,如果你要這樣搞,應該一開始就要搞了(萬一成功了大概會給你滿分吧) (不可能會成功的) 。等到後頭要求你自我辯證的時候才搞這招,那就來不及了,這大概就跟你去看病醫生一律回答「砍掉重鍊」有 87% 像。

更不用說,其實你的回答滿滿都是在自爆。其實你根本就希望有 .gitignore 阿! [指]

不然退 n 步講,寫程式、甚至科技進步的動力,有 94.87% 都是為了方便。如果你真的這樣立論成功了,那別說寫程式了,你要不要回頭當山頂洞人 :dancer:

所以,請繼續想吧... 阿哈哈哈...... [撚鬚長笑]

最後,請把「思考 / 自我辯證」變成一種習慣,甚至變成反射動作。就像《新世紀福爾摩斯》裡頭,福爾摩斯說:「我沒事的時候會思考如何謀殺親朋好友當作練習」。

太遙遠的人生大道理先不講,就說寫程式好了。好的程式設計師是懶惰的,不過懶惰的是在「作法」上(最好像鋼鐵人的 Javis)、而不是在想法上。

不然你幹麼寫那個什麼資料庫程式?用工人智慧就好啦~

阿哈哈哈哈...... [撚鬚長笑][被毆飛]

cwchou2016 commented 5 years ago

我真的想不到其他答案了 QQ 接下來我就要開始瞎掰...

.gitignore 的目的是確保某些檔案不要被追蹤,但是, 為什麼、為什麼、為什麼 要確保不追蹤某些檔案? ﹙因為我不知道,所以要問三次﹚

以下是我的猜測:

我覺得安全性絕對可以是一個原因。一旦帳號、密碼或是 credential 之類的檔案被 commit,就會留下紀錄,即使後來把這些檔案移除,commit 紀錄裡面還是可以看到內容。雖然說,如果這個 repo 沒有上傳或是非公開的,好像沒什麼問題,但是假設哪天,需要把這個 repo 分享給別人,那麼這些檔案的內容是有可能被其他人看到的。未了預防這種麻煩的事情,一開始就把這些跟安全性相關的檔案放進 .gitignore 裡,會比較安全﹙還是說有什麼暗黑的指令,可以移除 commit 裡面某個被追蹤的檔案,這樣的話,我這個說法就 GG 了...﹚。如果是公開的 repo,那就更應該要把 credential 之類的檔案放進 .gitignore 裡,一方面是避免自己不小心 push 出去,另一方面是讓 clone 的人不會不小心洩露他們的 credential 。

另外一個確保不追蹤某些檔案的理由可能跟 reviewer 有關。﹙不是的話就算了~ 我也沒有 review 過別人的 code。﹚如果已經知道哪些檔案是不需要 review 的,可以事先加進 .gitignore 裡面,避免 commit 的人把它加進去,影響 commit 的內容。﹙但是,reviewer 似乎有 reject 的大絕,反正看不慣就 reject。﹚不過,.gitignore 既然會被追蹤,就表示這個檔案對於 repo 來說是很重要的,在共同開發的時候,可以透過 .gitignore 讓他人知道哪些檔案是不要追蹤。﹙我是不知道有沒有人會看,但是如果真的不需要其他人知道哪些檔案要不要追蹤的話,一開始就不會放進遠端 GitHub 裡面了吧。﹚

猜測完畢。

MontyPan commented 5 years ago

我有一種「糟糕,是世界奇觀」的 fu

從上一個 comment 跟這一個 comment 看起來,你似乎沒有抓到「現在的題目」。現在的題目

請反駁以下論點:

  • 避免與安全相關的檔案 (例如連結資料庫的帳號、密碼,或是 Credential 的設定檔等) 不小心被 push 到公開的頁面。
  • 排除與程式碼相關的檔案 (例如執行程式的暫存檔)。因為這些檔案沒有追蹤的必要。

但是你還是停留在最開始的題目、或著說你都是在捍衛(原本要你反駁的)上述論點。

我不太確定你是忘記題目已經改了?還是你不習慣 or 無法搞這種自己反駁自己的人格分裂戲碼。所以我決定停止這個 task (還不快磕頭謝恩)(反正這種題目隨便抓都有,多的是機會 :rofl: )。這個 task 暴露出來的... ㄜ... 問題,我們 11/14 咪挺的時候再說 [抖]。


上頭第二個論點我在前一個 comment 時已經反駁過了,現在我來反駁第一個。

在實務上的確有人會把資料庫的帳號密碼放在設定檔然後 commit 進 repo。原因是:repo 中的程式碼是可以馬上開始運作的。

完整的鍵盤版本會是這樣:

從這個話題還可以延伸出去幾個議題,先 FYI 一下:

當然,這個作法也還是可以找到論點去反駁, 然後你就會發現你的人生被人格分裂式的自我反駁給塞滿, 不過目前我的經驗是好處大於壞處,尤其是 team work 的時候,實際業界大多也是這個路線,不然 CI 很難作。


最後,請你花時間好好整理一下這整個 thread 當中到底發生了什麼事情,包含你到底哪邊有了辯證上的問題 or 找找看我有沒有哪邊炸了問題 :see_no_evil: 。

或許這比你會不會寫 Java 還重要的多。