以前 CSV、SVN 等等,都有版本編號可以查看,由版本編號就可以判斷新舊,就可以透過程式做一些處理,但是 Git 都是 sha-1 的 Hash,要怎麼做出數字的編號呢?
標籤: git
微軟以 75億美金 收購 GitHub
微軟於 2018/6/4 以 75億美金買下 GitHub,造成不少的開發專案都往 GitLab 搬移(遭微軟併購消息傳出,GitHub使用者大遷徙,蜂擁轉移至GitLab),來看看後續的發展~
- 註:我個人是覺得這是好事,畢竟 GitHub 並不賺錢,有大公司在後面撐腰,比較能長久經營下去~
Linux CLI 查看 Git Repository 紀錄工具:GRV
Linux CLI 要查看 Git repository 的圖形顯示,可以使用 tig,視窗顯示查看可以使用 Gitk。
不過 tig 能看的比較有限,操作還是比較偏向 Git 命令列,而不是像 Gitk 上下左右的視窗可以即時看 Log、diff 等等的資料。
grv 就類同 CLI 版的 Gitk,而且執行速度很快,有空可以玩玩看~
Redmine 「專案儲存機制」無法更新問題 修復步驟
Redmine 專案可以使用 GUI 的方式來查看 Git Repository 的 Commit / 歷史紀錄 等等資訊,但是在某個日期後,就一直無法更新,手動執行下述強制更新命令也沒用。
環境:Debian / Ubuntu Linux
- $ cd /usr/share/redmine
- $ sudo bin/rails runner "Repository.fetch_changesets" -e production
- 出現下述 Bad object (Git 一些錯誤)
fatal: bad object xxxaabbcc...
要怎麼處理呢?
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
Gitolite push 自動更新如何做
Gitolite 的某個 Project 要 push 後,自動到前端的機器自動更新,要如何做?
Gitolite push 自動更新如何做
一般要實做 push 自動更新,只需要從 hooks/post-update 著手即可。
- cd git-project/hooks/
- cp post-update.sample post-update
- chmod +x post-update
- vim post-update # 內容如下
- #!/bin/sh
- /usr/bin/ssh user@example.com "cd /var/www/project/;git pull"
- 再來將 user 的 ~user/.ssh/id_rsa 放到 /home/gitolite/.ssh/ 即可。
但是 gitolite 會將 hooks 裡面的檔案權限都自動修改成 640 (不可執行)
所以換個作法:
- cd git-project/hooks/
- cp post-update.sample /usr/share/gitolite/hooks/common/post-update.project
- chmod +x /usr/share/gitolite/hooks/common/post-update.project
- vim /usr/share/gitolite/hooks/common/post-update.project # 內容如下
- #!/bin/sh
- /usr/bin/ssh user@example.com "cd /var/www/project/;git pull"
- 再來將 user 的 ~user/.ssh/id_rsa 放到 /home/gitolite/.ssh/ 即可。
- ln -s /usr/share/gitolite/hooks/common/post-update.project /var/cache/git/project/hooks/post-update
這樣子就可以 push 試試看囉~
Git 低於 2.7.1 的安全性問題修正
Git 於 2016/3/17 有發現漏洞,而且問題不小,詳可見:Remote Code Execution in all git versions (client + server) < 2.7.1: CVE-2016-2324, CVE-2016‑2315
Git Diff 演算法
Git Diff 可以比對 Binary、Text,怎麼做的呢?
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,所以將新增 / 移除一起寫。