最新文章

中文域名怎麼測試 DNS Flag Day?

中文域名怎麼測試 DNS Flag Day?

中文域名怎麼測試 DNS Flag Day 呢?

DNS Flag Day 該注意什麼?

DNS Flag Day 該注意什麼?

最近的大新聞是 DNS Flag Day!我還以為是胡扯,結果查一下還真有這個東西。

Git LFS 原理、大小檔案都適用

Git LFS 原理、大小檔案都適用

Git LFS 是 Large File Storage 的縮寫,主要是讓 Git 能夠處理大型檔案。因為 Git 的設計上都是以文字檔的程式碼為主,而程式碼的大小通常都不會太大,都是很多小型檔案為主。而當其他開發者在使用 Clone 來複製你的專案時,Git 預設會拉下 master 分支內的所東西,其實不只是當前的檔案,還包括了每一個檔案的歷史紀錄,這些東西都會除存在 .git 的目錄裡面。

所以若你將大型檔案 commit 到 master 內,就會發生一場災難,只要所有與此專案相關的人,都必須下載這個檔案,更不用說如果有異動的時候。

可以刪除 Git 內的大型檔案嗎?

可以,你可以參考 高見龍-為你自己學 Git 的內容來刪除這個檔案,並且用 push -f 的方式把遠端的內容也覆蓋掉。但是在你清除之前,其他所有人都還是必須下載整個儲存庫的內容。並且,你確定你能正確清除檔案,而不是把整個儲存庫搞壞?

大型檔案

什麼是大型檔案呢?一般來說,大約 10MB 以上的檔案,應該就算大型檔案,但也不是說你可以塞 100 個 1MB 的檔案,然後抱怨 Git 速度太慢。

其實 Git LFS 並不是處理大型檔案,在 Git 中只有分為 “文字格式” 跟 “二進位” 這兩種檔案類型,文字格式就是常見的程式碼,我們利用一般的筆記比舊可以開啟的檔案;而二進位檔就像是圖片、影片這種 Binary 格式的檔案,必須利用對應的軟體來開啟,而用筆記本開啟文字檔的話,通常都會看到亂碼。

而我們一般的程式碼都是屬於文字格式,Git 可以讀取檔案的內容用 diff 比較差異,而 Git 遇到二進位檔的時候,並不會去讀取檔案內容,所以你不能用 git diff 來看到差異,Git 若是知道這是二進位檔,就會以二進位的方式處理 (直接存入儲存庫、且不能用 diff 之類的工具比較內容)。

.gitattributes

.gitattributes 是用來告訴 Git 此專案要客製化的部份,為什麼要客製呢,因為 LFS 的使用條件就是你必須要告訴 Git,”這個檔案是 LFS 檔,請用 LFS 的方式處理“,但我們不需要自己設定,透過 git lfs 指令操作即可。

其實不只大型檔案,所有的檔案都可以用 .gitattributes 來告訴 Git 該怎麼處理這個檔案。

Git LFS

安裝

請依照 https://packagecloud.io/github/git-lfs/install 的說明安裝 Git LFS。

設定 yum 的 repo.d

設定好 yum 的 repo 之後就可以用 yum search 找到 git-lfs

yum search git-lfs
yum install git-lfs

最後安裝完成之後記得要用 git lfs install 指令讓你的 git 支援 lfs:

git lfs install
OK,這樣就安裝完成,接下來就可以使用 Git LFS。

指令

$ git lfs track 10mb.psd
$ git add .gitattributes
$ git commit -m 'Add PSD file'
$ git push origin master

上述範例中只有第一行是新的指令,其他的都是一般的 Git 指令,是不是很神奇!使用起來一點都不難,你只需要將你要追蹤的大型檔案加入追蹤之後就可以了。

但其實關鍵在於第二行,每一次你 “新增” 一個大型檔案的時候,都要重新用 add 再加入一次 .gitattributes,但異動大型檔案的時候不用。

原理

其實 git lfs track 指令只是增加一行 .gitattributes 的描述,這樣 Git 就知道這個檔案必須使用 LFS 的方式處理,也就是用二進位的方式處理,(也就是什麼都不處理)。

一開始,你的專案中沒有 .gitattributes 這個檔案,然後你用 git lfs track 之後,你會發現有 .gitattributes 並且新增了一行:

$ git lfs track 10mb.psd
Tracking "10mb.psd"
$ ls -a
10mb.psd  .git  .gitattributes
$ cat .gitattributes 
10mb.psd filter=lfs diff=lfs merge=lfs -text

這行 “10mb.psd filter=lfs diff=lfs merge=lfs -text” 就是告訴 Git 在處理 filter、diff、merge 時將 10mb.psd 透過 lfs 的方式處理。而 -text 就是告訴 Git 這不是文字檔 (text 表示文字檔)。

用 git lfs track 追蹤檔案之後,就可以推送到遠端目錄上,你在首次推上去的時候,會要一些時間將大型檔案傳輸到遠端。以 GitLab 為例,推送上去之後,檔案會被標記為 LFS

GitLab 介面

接者,在別的地方 (換一個資料夾就可以),把該專案 clone 下來,你會看到 LFS 檔案變成了一個 130 bytes 的文字檔,只有紀錄一些基本資訊:

$ ls -lha
總計 40K
-rw-rw-r--. 1 haway haway    3  1月 10 21:11 A1
-rw-rw-r--. 1 haway haway   41  1月 10 21:11 .gitattributes
-rw-rw-r--. 1 haway haway  101  1月 10 21:11 index.html
-rw-rw-r--. 1 haway haway  130  1月 10 21:11 Me640x640.jpg
-rw-rw-r--. 1 haway haway 2.7K  1月 10 21:11 README.md
$ cat Me640x640.jpg 
version https://git-lfs.github.com/spec/v1
oid sha256:83557700f78226f0b3b3422f161a0663f55df242152a2a65eaef2c3af052f246
size 28433

然後你需要這個檔案的時候再用 git lfs pull 的方式把大型檔案抓下來。

$ git lfs pull
$ 1/1), 28 KB | 0 B/s                              
$ ls -lh
總計 44K
-rw-rw-r--. 1 haway haway    3  1月 10 21:11 A1
-rw-rw-r--. 1 haway haway  101  1月 10 21:11 index.html
-rw-rw-r--. 1 haway haway  28K  1月 10 21:14 Me640x640.jpg
-rw-rw-r--. 1 haway haway 2.7K  1月 10 21:11 README.md
-rw-rw-r--. 1 haway haway   26  1月 10 21:11 slove-issue-7

所以對於其他 clone 使用者來說,他們若不需要異動大型檔案,就不需要進行 git lfs pull 的動作,於是那個原本的大型檔案會變成一個 130 bytes 的文字檔。即使他 clone 整個 master,也是很小的儲存庫。

Git LFS 的使用無關檔案大小,唯一的重點在於某些檔案你想放在 master 內,或是說必須放在 master 內,而其他人又不需要同步這個檔案的話,就可以使用 LFS 的方式來管理此檔案。


WordCamp Taipei 2018 志工心得

WordCamp Taipei 2018 志工心得

我是哈維!WordCamp Taipei 2018 志工至一,能夠參與到 WordCamp […]

變更 Doceker image 儲存庫位置

變更 Doceker image 儲存庫位置

安裝 K8S 的時候大約會使用掉約 40G 的空間,全部都是 Docker 映像檔 (Images)。結果我在裝完之後 / (root) 剩下 2G,這表示我之後不能 docker pull 任何 images 下來。於是就找了一下變更 Docker Images 儲存庫的方法。

TTL 是什麼?該設定多久?

TTL 是什麼?該設定多久?

TTL 的全名叫做 Time to Live,是 DNS 解析的時候在使用的,主要的作用是設定每一筆紀錄在 DNS 快取伺服器所保留的時間我們常常在設定 DNS 紀錄的時候會有一個欄位叫做 TTL,到底要設定多少呢?這個值,如果你常常在變動 DNS 紀錄的話,有多小就調多小 (要看你的代管商最小能設定多少),反之,如果你沒有常常變動,可以調大一點,單位是秒,若你設定 1800,表示 1800 秒。所以當你變更這筆 DNS 紀錄的時候,要 1800 秒後才會全球生效!

(繼續閱讀…)
DNSSEC 壞掉會發生什麼情況?該怎麼修復?

DNSSEC 壞掉會發生什麼情況?該怎麼修復?

客戶發生實際案例。他在安裝 SiteGround 的 SSL 憑證的時候,裝不進去,Sit […]

不要在域名快到期時才移轉域名

不要在域名快到期時才移轉域名

最近發生的一個真實案例。客戶想把域名進行移轉,錢也付了,EMail 移轉確認信的確認連結也 […]

主動取消訂閱的妙招 – 郵件別名

主動取消訂閱的妙招 – 郵件別名

現在大家都有使用 GMail 的服務,更多人是直接使用 GMail 當作公司信箱帳號,因為容量大,並且對於垃圾郵件的過濾效果也不錯。幾乎是每一個人都有自己的 GMail 信箱。但通常我們都會只會使用一個信箱當作主要的信箱,因為方便管理與設定。

像筆者本身也有一個 @gmail 的帳戶,使用也很久了,目前所有重要資訊都會往這個信箱塞,再加上有訂閱一些電子報,其實每天都收到一堆信,扣掉垃圾信後還是一堆,有時候還要去垃圾信裡面看一下有沒有誤判的信件。

一般來說我們註冊信箱的時候,或是你有一個域名,你就可以建立自己的信箱,使用自己喜愛的名子 user@yourname.com 來當電子郵件帳號,其實現在比較少人會使用電子郵件,大部分都會直接用 LINE、Messenger、Telegram  等軟體來直接與對方溝通,公事上才有可能會使用公司的信箱,所以信箱幾乎都只是拿來印名片的,或是要傳遞些檔案的方法之一。雖然使用的機會已經大幅減少,但其實還有一個重要的功能,就是 註冊其他網路服務的帳號。譬如我們要使用 Facebook、Yahoo 線上購物、PChome 線上購物等等的網路服務,都還是需要透過 EMail 來註冊一個帳號。

通常註冊帳號之後,EMail 就會開始收到信,收到通知信、廣告信、垃圾信,最後的結論就是你不想再使用這個信箱了,所以只好又去重新申請一個。

另外有時候我們會用電子信箱去訂閱一些電子報,或是優惠通知,根據台灣法律,在你不需要時,應該有可以退訂電子報的方法,通常退訂的方法會在電子報的下方已 “取消訂閱” 的連結,但是你有遇過,按下退訂結果出現網頁錯誤,或是要求你打電話給客服要求退訂,甚至有顯示取消成功,結果後續還是一直收到廣告信,無可奈何。

其實有一個很簡單並且可以奪回控制權,並且不會影響你現有信箱帳戶的方式,就是使用 信箱別名! 別名就像是你的網路暱稱一樣,他代表者你,但是你使用的是另外一個名子,而且有些人會在註冊信箱時使用 last name + first name 的方式(或是公司配發),其實已經把你的個資洩露出去了呢!假如你如果有一個實體信箱是:

haway@rsync.tw

只要你將這個郵件信箱公佈出去,就會開始收到一堆垃圾信。若你像我一樣用很久了,要把他丟棄也不太可能,不過你可以從現在開始,找尋有提供別名的郵件服務商,採用別名的策略,可以把掌控全握在自己手中喔!譬如你可以把上述實體位址加上別名:pchome@,然後註冊 pchome 的服務,若是哪天你不想收到 pchome 的東西,就只要把 pchome 這個別名刪除就可以,或是另外建立一個 pchome 的轉址就可以轉到其他信箱。當然!PChome 只是範例,你可以為每個不同的服務建立不同的別名,但是實際使用的實體信箱,若是您要訂閱電子報,也可以用別名的方式來訂閱電子報,若無法取消訂閱的時候,就只要把別名刪除即可。

如何建立信箱別名

如果你跟我一樣使用 Gandi 的服務,每個名都有免費提供 2 個 3GB 的信箱,還有無限制數量的別名,就可以設定我剛說的方式,您只許要點選域名之後,在點選左方電子信箱 ->(若沒有信箱的話就新增一個)-> 已經有實體信箱就點選信箱右側的鉛筆(編輯):

點選實體信箱之後,點選 管理別名

在下方白色大框框內填入別名的名稱,你可以用萬用字元來涵蓋所有符合的字串,譬如如果你設定 super* ,表示 superA、superman、superzz 都是符合的條件。如下的範例,我看起來像有五個信箱,但其實我只有一個,別名是不會佔空間,實體信件會直接寄到 haway@rsync.tw 內。所以我可以用 gandi@rsync.tw 去註冊 Gandi 的服務,twitter@rsync.tw 去註冊 twitter。subscribe-news@rsync.tw 可以去訂閱某一家的訂電子報,然後當你不想要收到電子報的時候,只要把 subscribe-news 這個別名砍掉就可以了,你可以把每個電子報建立不同的別名,然後只需要在實體信箱收信即可。

利用別名可以把信箱的虛擬跟真實混搭,善加利用能讓電子信箱的管理最大化,你現在可以開始想想看要怎麼設定你的信箱別名。如果你的信箱不提供別名服務,參考一下 Gandi 的服務吧!

DNSSEC 分析-CloudFlare 與 Gandi LiveDNS DNSSEC 代管

DNSSEC 分析-CloudFlare 與 Gandi LiveDNS DNSSEC 代管

什麼是 DNSSEC ? 透過 DNS 的延伸安全協議,用非對稱金鑰與數位簽章的方式將 D […]


焦點文章

人體工學鍵盤, MS Ergonomic 4000, Sculpt, Penixx 使用心得

人體工學鍵盤, MS Ergonomic 4000, Sculpt, Penixx 使用心得

我是學程式設計長大的,會用這個詞大概就知道我是七年級生,現在來說就是所謂的寫 code 的那種人,所以我對鍵盤的需求還滿高的,以前一敲鍵盤就是一整天的時間,所以那種傳統平平的鍵盤,用到後來手腕就是很痛,就轉向使用人體工學鍵盤,沒想到一用就回不去了,我第一個使用的人體工學鍵盤是 Acer Egro-31…

(繼續閱讀…)