讓Git untrack已經進repository的檔案

初學Git的人都知道,可以使用.gitignore來忽略檔案

但如果這個檔案已經進到repository了呢?

一旦檔案已經commit到repository,只把該檔案加到.gitignore的話是沒有用的

還要將那個檔案變成untracked的狀態,這時候可以使用

git rm --cached i-am-a-file-name

將檔案untrack後,並commit這次的異動

再把檔案加到.gitignore

就大功告成了

關於git config的層級

安裝完git後為了方便性,需要初始化一些設定

這個動作可以透過git config來完成

git config有分為三種不同的層級,以下是由高到低的優先權

 

1.檔案庫層(–local參數可省略)的設定會在.git資料夾中的config檔

$ git config --local user.name "Tony Ciou"

 

2.使用者層(global)的設定會在家目錄的.gitconfig檔案內

$ git config --global user.name "Tony Ciou"

 

3.系統層(system)的設定會在/etc/gitconfig檔案內

$ git config --system user.name "Tony Ciou"

 

一般來說安裝git後至少會初始化以下的設定

$ git config --global user.name "YOUR NAME"
$ git config --global user.email "YOUR EMAIL ADDRESS"
$ git config --global core.editor "YOUR CODE EDITOR"

讓Git識別檔案的大小寫

前陣子和朋友一起開發一個小專案的時候遇到的問題

我明明建立了一個新的檔案,但我朋友pull之後卻看不到

因為同一個資料夾有兩個檔案很相似:

test.php

Test.php

當下就直覺跟檔案名稱的大小寫有關

查了一下文件之後發現要解決這個問題其實還滿簡單的,只要修改一下git config

git config core.ignorecase false

由於Windows和MacOS的檔案名稱是不分大小寫的(case-insensitive),也就是說以上的兩個檔案會被識別為同一個

我自己的筆電是裝Linux所以從來沒有遇過這個問題,因為Linux的檔案名稱是分大小寫(case-sensitive)

同理,如果把core.ignorecase改成true那麼在Linux上也可以達到檔案不分大小寫(case-insensitive)

解決無法在Virtualbox Guest OS Shared Folder建立Link

建立好VM的shared foleder後發現無法在該目錄建立Link

找了一下只需要在Host OS下個一行指令就能解決

Linux:

VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

Windows:

VBoxManage.exe setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

VM_NAME: VM(Guest OS)的名字
SHARE_NAME: Shared Foleder的名字 (不含”sf_”前綴字)

記得重啟VM!
參考來源:http://serverfault.com/questions/345341/cant-create-symlinks-in-virtualbox-shared-folders

How to Enable Virtualbox 5.0 Shared Folder on Debian 8.5 Guest OS Step By Step

真的花了超多時間才解決這個問題!

前置作業:

  1. Devices > Insert Guest Additions CD image
  2. 切換到root權限

掛載剛剛插入的Guest Additions CD映像檔

mount /dev/sr0 /mnt

確認掛應像檔的內容

cd /mnt
ls -al

執行VBoxLinuxAdditions.run

./VBoxLinuxAdditions.run

若出現以下內容表示安裝失敗:

The make utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.

The gcc utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.

The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.

Building the main Guest Additions module …fail!
(Look at /var/log/vboxadd-install.log to find out what went wrong)

檢查安裝紀錄檔

tail /var/log/vboxadd-install.log

內容如下:

/opt/VBoxGuestAdditions-5.0.24/src/vboxguest-5.0.24/build_in_tmp: 62: /opt/VBoxGuestAdditions-5.0.24/src/vboxguest-5.0.24/build_in_tmp: make: not found

重點是後面的make: not found
看起來是還沒裝make,安裝make

apt-get install make

再執行一次VBoxLinuxAdditions.run

./VBoxLinuxAdditions.run

結果還是安裝失敗

The gcc utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.

The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.

Building the main Guest Additions module …fail!
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions …done.

再檢查一次/var/log/vboxadd-install.log

tail /var/log/vboxadd-install.log

看起來來是少裝了一些東西,爬了一些文章看到這篇試著安裝DKMS就搞定了

/tmp/vbox.0/Makefile.include.header:97: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR= and run Make again. Stop.

安裝dkms

apt-get install dkms

再執行一次VBoxLinuxAdditions.run

./VBoxLinuxAdditions.run

若沒有出現任何的錯誤訊息就重啟VM

確認/media目錄的內容,看到sf_xxx目錄表示設定成功了!
virtualbox_shared_folder

來源和目的伺服器都需要有rsync

bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.1]

之前使用rsync一直遇到這個問題

很納悶的是我的本機端明明有安裝rsync但怎麼會噴command not found

後來看到這篇文章才知道由於來源端(source)和目的端(destination)都要使用rsync溝通

所以使用rsync看到上述的錯誤訊息先檢查來源和目的端是否都有安裝rsync

因為某些Linux Distribution預設不會安裝rsync

安裝指令:

apt-get install rsync

淺談jQuery Event Handler 的 extraParameters 使用時機

最近常常需要使用jQuery來寫一些前端的功能
前陣子終於領悟到了jQuery API Document上寫的extraParameters的使用時機,趕緊記錄一下
其實jQuery API Document寫得滿清楚的

extraParamters是一個選擇性的參數,主要的用途就是傳遞額外參數給event Handler

extraParameters
Additional parameters to pass along to the event handler.

例如,有一個使用情境是使用者選擇完下拉選單會帶入預設的資料,但在修改時則帶入已儲存在DB的資料,如果在這個情況下直接trigger change預設的資料就會把應該顯示的資料蓋掉,這時候extraParameters就派上用場了!

在trigger change event handler的時候使用extraParameters,來傳遞需要顯示的資料(sourceText)

      $('.btn-load').click(function(e){
        var id = $(this).attr('id');
        $language.val(id).trigger('change', {
          sourceText: $(this).parent().parent().find('td')[1].innerHTML
        });
      });
 完整的JS code如下:
    $(function(){
      $language = $('#language');
      $language.change(function(e, o){
        if($(this).val() === ''){
          $('#desc').text('');
          return false;
        }
        
        $desc = $('#desc');
        
        if(typeof o === 'object'){
          if(o.sourceText){
            $desc.text(o.sourceText); 
          }          
        }
        else{          
          $desc.text($(this).find("option:selected").text() + ' is a programming language.');          
        }
        
      });
      $('.btn-load').click(function(e){
        var id = $(this).attr('id');
        $language.val(id).trigger('change', {
          sourceText: $(this).parent().parent().find('td')[1].innerHTML
        });
      });
    });

Demo Code