微軟以 75億美金 收購 GitHub

微軟於 2018/6/4 以 75億美金買下 GitHub,造成不少的開發專案都往 GitLab 搬移(遭微軟併購消息傳出,GitHub使用者大遷徙,蜂擁轉移至GitLab),來看看後續的發展~

  • 註:我個人是覺得這是好事,畢竟 GitHub 並不賺錢,有大公司在後面撐腰,比較能長久經營下去~

閱讀全文〈微軟以 75億美金 收購 GitHub〉

Linux CLI 查看 Git Repository 紀錄工具:GRV

Linux CLI 要查看 Git repository 的圖形顯示,可以使用 tig,視窗顯示查看可以使用 Gitk。

不過 tig 能看的比較有限,操作還是比較偏向 Git 命令列,而不是像 Gitk 上下左右的視窗可以即時看 Log、diff 等等的資料。

grv 就類同 CLI 版的 Gitk,而且執行速度很快,有空可以玩玩看~

閱讀全文〈Linux CLI 查看 Git Repository 紀錄工具:GRV〉

Redmine 「專案儲存機制」無法更新問題 修復步驟

Redmine 專案可以使用 GUI 的方式來查看 Git Repository 的 Commit / 歷史紀錄 等等資訊,但是在某個日期後,就一直無法更新,手動執行下述強制更新命令也沒用。

環境:Debian / Ubuntu Linux

  1. $ cd /usr/share/redmine
  2. $ sudo bin/rails runner "Repository.fetch_changesets" -e production
  3. 出現下述 Bad object (Git 一些錯誤)
    fatal: bad object xxxaabbcc...

要怎麼處理呢?

閱讀全文〈Redmine 「專案儲存機制」無法更新問題 修復步驟〉

Google 的程式碼控管系統

之前聽說 Google 把所有 Source code 都放在同一個 Git 管理,就覺得怪怪的,每個人或第一次 git pull 的時候應該都會炸掉才是。

註:此篇文章會說明,Google 確實把 Source code 放在同一個 Repository,不過是自己做的版本控制系統,不是 Git。

這篇文章把 Google 的程式碼版本控管都做詳細說明:Why Google Stores Billions of Lines of Code in a Single Repository

閱讀全文〈Google 的程式碼控管系統〉

Gitolite push 自動更新如何做

Gitolite 的某個 Project 要 push 後,自動到前端的機器自動更新,要如何做?

Gitolite push 自動更新如何做

一般要實做 push 自動更新,只需要從 hooks/post-update 著手即可。

  1. cd git-project/hooks/
  2. cp post-update.sample post-update
  3. chmod +x post-update
  4. vim post-update # 內容如下
    #!/bin/sh
    
    /usr/bin/ssh user@example.com "cd /var/www/project/;git pull"
  5. 再來將 user 的 ~user/.ssh/id_rsa 放到 /home/gitolite/.ssh/ 即可。

但是 gitolite 會將 hooks 裡面的檔案權限都自動修改成 640 (不可執行)

所以換個作法:

  1. cd git-project/hooks/
  2. cp post-update.sample /usr/share/gitolite/hooks/common/post-update.project
  3. chmod +x /usr/share/gitolite/hooks/common/post-update.project
  4. vim /usr/share/gitolite/hooks/common/post-update.project # 內容如下
    #!/bin/sh
    
    /usr/bin/ssh user@example.com "cd /var/www/project/;git pull"
  5. 再來將 user 的 ~user/.ssh/id_rsa 放到 /home/gitolite/.ssh/ 即可。
  6. ln -s /usr/share/gitolite/hooks/common/post-update.project /var/cache/git/project/hooks/post-update

這樣子就可以 push 試試看囉~

PHP 取得 Git 的 branch name

想要取得專案中目前在 Master 或 Branch,可以判斷要去抓不同的 config,可以使用此 function。

<?php
function get_git_branch_name()
{
    $git_head = './.git/HEAD';
    return (file_exists($git_head)) ? implode('/', array_slice(explode('/', file_get_contents($git_head)), 2)) : '';
}
?>

註:$git_head 的路徑請自行修改設定。

使用方式:

<?php print_r(get_git_branch_name()); // master ?>

感謝 Fwolf 的建議,用 system 的指令執行:git branch | grep '*' | awk '{print $2}' ,可以解決 submodule 抓不到 branch 的問題

Git Submodule 新增、使用 與 移除

Git Submodule 的新增、使用 與 移除,在此篇一起做整理。

於 Facebook 的 PHP SDK 就是將此用 Git Submodule 拉進來使用的,最近查詢才發現忘了寫,最糟糕的是,沒想到這次 Facebook SDK 是需要移除整個換新的 Repository,所以將新增 / 移除一起寫。

閱讀全文〈Git Submodule 新增、使用 與 移除〉