顯示具有 Git 標籤的文章。 顯示所有文章
顯示具有 Git 標籤的文章。 顯示所有文章

2015年9月17日 星期四

從 git repository 自行製作上游軟體的 snapshot tarball

在 Linux 系統上面的軟體開發,偶而會遇到需要直接從 git repository 取出尚未正式釋出的版本,以下分享一下我在參加 DebConf15 後,學會的使用流程。

以下以 http://www.freedesktop.org/wiki/Software/libmbim/ 為例子。

首先要找到 git repository 的位置,然後使用 git 指令 clone 到本地端。

$ git clone git://anongit.freedesktop.org/libmbim/libmbim

然後在該目錄底下,找出最後 commit 的日期。

$ git log -1 --format=%cd --date=short . | sed 's/-//g'
20150910

找出目前的版本號碼,libmbim 的版本號碼在寫作這篇文章時寫在 configure.ac 裡面。

dnl Process this file with autoconf to produce a configure script.                                                                                                                                                                             
AC_PREREQ([2.68])

dnl The libmbim version number
m4_define([mbim_major_version], [1])
m4_define([mbim_minor_version], [13])
m4_define([mbim_micro_version], [0])
m4_define([mbim_version],
          [mbim_major_version.mbim_minor_version.mbim_micro_version])

版本號碼也就是 1.13.0 這樣。

然後檢查一下有沒有 .gitignore,如果有的話要先另建一個文字檔 .gitattributes 放入下面的內容。

.gitattributes export-ignore
.gitignore export-ignore

然後就可以使用 git 跟 xz 指令來產生 tarball 檔案。

$ git archive --worktree-attributes --format=tar --prefix=libmbim-1.13.0+20150910/ HEAD | xz > ../libmbim-1.13.0+20150910.tar.xz

如果本來就沒有 .gitignore 的話,就可以不需要使用參數 --worktree-attributes,這樣產生出來的 tarball 檔案就不會包含 .gitignore 在裡面,在使用 Debian 上的一些 git based 的管理工具,會因為 .gitignore 的存在而產生問題。

最後檢查一下 libmbim-1.13.0+20150910.tar.xz 的內容,看看是否沒有那些不應該存在的 .git 開頭的檔案在裡面。

$ tar tf libmbim-1.13.0+20150910.tar.xz
libmbim-1.13.0+20150910/
libmbim-1.13.0+20150910/AUTHORS
libmbim-1.13.0+20150910/COPYING
libmbim-1.13.0+20150910/COPYING.LIB
libmbim-1.13.0+20150910/Makefile.am
libmbim-1.13.0+20150910/NEWS
libmbim-1.13.0+20150910/README
libmbim-1.13.0+20150910/autogen.sh
libmbim-1.13.0+20150910/build-aux/
libmbim-1.13.0+20150910/build-aux/Makefile.am
libmbim-1.13.0+20150910/build-aux/mbim-codegen/
libmbim-1.13.0+20150910/build-aux/mbim-codegen/Makefile.am
libmbim-1.13.0+20150910/build-aux/mbim-codegen/Message.py
libmbim-1.13.0+20150910/build-aux/mbim-codegen/ObjectList.py
libmbim-1.13.0+20150910/build-aux/mbim-codegen/Struct.py
libmbim-1.13.0+20150910/build-aux/mbim-codegen/mbim-codegen
libmbim-1.13.0+20150910/build-aux/mbim-codegen/utils.py
libmbim-1.13.0+20150910/build-aux/templates/
libmbim-1.13.0+20150910/build-aux/templates/Makefile.am
libmbim-1.13.0+20150910/build-aux/templates/mbim-enum-types-template.c
libmbim-1.13.0+20150910/build-aux/templates/mbim-enum-types-template.h
libmbim-1.13.0+20150910/build-aux/templates/mbim-error-quarks-template.c
libmbim-1.13.0+20150910/build-aux/templates/mbim-error-types-template.c
libmbim-1.13.0+20150910/build-aux/templates/mbim-error-types-template.h
libmbim-1.13.0+20150910/configure.ac
libmbim-1.13.0+20150910/data/
libmbim-1.13.0+20150910/data/Makefile.am
libmbim-1.13.0+20150910/data/mbim-service-auth.json
libmbim-1.13.0+20150910/data/mbim-service-basic-connect.json
libmbim-1.13.0+20150910/data/mbim-service-dss.json
libmbim-1.13.0+20150910/data/mbim-service-ms-firmware-id.json
libmbim-1.13.0+20150910/data/mbim-service-ms-host-shutdown.json
libmbim-1.13.0+20150910/data/mbim-service-phonebook.json
libmbim-1.13.0+20150910/data/mbim-service-proxy-control.json
libmbim-1.13.0+20150910/data/mbim-service-sms.json
libmbim-1.13.0+20150910/data/mbim-service-stk.json
libmbim-1.13.0+20150910/data/mbim-service-ussd.json
libmbim-1.13.0+20150910/data/pkg-config/
libmbim-1.13.0+20150910/data/pkg-config/Makefile.am
libmbim-1.13.0+20150910/data/pkg-config/mbim-glib.pc.in
libmbim-1.13.0+20150910/docs/
libmbim-1.13.0+20150910/docs/Makefile.am
libmbim-1.13.0+20150910/docs/libmbim-icon.svg
libmbim-1.13.0+20150910/docs/libmbim-logo.png
libmbim-1.13.0+20150910/docs/libmbim-logo.svg
libmbim-1.13.0+20150910/docs/man/
libmbim-1.13.0+20150910/docs/man/Makefile.am
libmbim-1.13.0+20150910/docs/reference/
libmbim-1.13.0+20150910/docs/reference/Makefile.am
libmbim-1.13.0+20150910/docs/reference/libmbim-glib/
libmbim-1.13.0+20150910/docs/reference/libmbim-glib/Makefile.am
libmbim-1.13.0+20150910/docs/reference/libmbim-glib/libmbim-glib-common.sections
libmbim-1.13.0+20150910/docs/reference/libmbim-glib/libmbim-glib-docs.xml
libmbim-1.13.0+20150910/docs/reference/libmbim-glib/version.xml.in
libmbim-1.13.0+20150910/gtester.make
libmbim-1.13.0+20150910/m4/
libmbim-1.13.0+20150910/m4/compiler-warnings.m4
libmbim-1.13.0+20150910/src/
libmbim-1.13.0+20150910/src/Makefile.am
libmbim-1.13.0+20150910/src/libmbim-glib/
libmbim-1.13.0+20150910/src/libmbim-glib/Makefile.am
libmbim-1.13.0+20150910/src/libmbim-glib/generated/
libmbim-1.13.0+20150910/src/libmbim-glib/generated/Makefile.am
libmbim-1.13.0+20150910/src/libmbim-glib/libmbim-glib.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-cid.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-cid.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-compat.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-compat.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-device.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-device.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-enums.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-errors.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-message-private.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-message.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-message.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-proxy-helpers.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-proxy-helpers.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-proxy.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-proxy.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-utils.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-utils.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-uuid.c
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-uuid.h
libmbim-1.13.0+20150910/src/libmbim-glib/mbim-version.h.in
libmbim-1.13.0+20150910/src/libmbim-glib/test/
libmbim-1.13.0+20150910/src/libmbim-glib/test/Makefile.am
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-cid.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-fragment.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-message-builder.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-message-parser.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-message.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-proxy-helpers.c
libmbim-1.13.0+20150910/src/libmbim-glib/test/test-uuid.c
libmbim-1.13.0+20150910/src/mbim-proxy/
libmbim-1.13.0+20150910/src/mbim-proxy/76-mbim-proxy-device-ownership.rules.in
libmbim-1.13.0+20150910/src/mbim-proxy/Makefile.am
libmbim-1.13.0+20150910/src/mbim-proxy/mbim-proxy.c
libmbim-1.13.0+20150910/src/mbimcli/
libmbim-1.13.0+20150910/src/mbimcli/Makefile.am
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-basic-connect.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-completion
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-dss.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-helpers.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-helpers.h
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-ms-firmware-id.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-ms-host-shutdown.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli-phonebook.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli.c
libmbim-1.13.0+20150910/src/mbimcli/mbimcli.h
libmbim-1.13.0+20150910/utils/
libmbim-1.13.0+20150910/utils/Makefile.am
libmbim-1.13.0+20150910/utils/mbim-network.in

2015年8月17日 星期一

在 Ubuntu 14.04 上面使用 git-pbuilder 來編譯 Debian packages 給 sid 使用

在使用

$ DIST=sid ARCH=amd64 git-pbuilder create
之前,可以先編輯 ~/.pbuilderrc 檔案,加上下面的內容。

MIRRORSITE=http://ftp.debian.org/debian
DEBOOTSTRAPOPTS=( '--keyring' '/usr/share/keyrings/debian-archive-keyring.gpg' )

然後安裝 debian-archive-keyring cowbuilder git-buildpackage 這幾個套件。

 $ sudo apt-get install debian-archive-keyring cowbuilder git-buildpackage

然後就可以使用

$ DIST=sid ARCH=amd64 git-pbuilder create
來產生 /var/cache/pbuilder/base-sid-amd64.cow 這個目錄。

之後就可以在有使用 gbp 管理的 Debian package 的 git repository 底下使用

$ gbp buildpackage --git-pbuilder --git-arch=amd64 --git-dist=sid --git-export-dir=../build-dir
來編譯 Debian package 了。

2013年8月26日 星期一

使用 git-buildpackage 維護原本就是使用 Git 維護的上游軟體的 Debian package

首先是將上游軟體的原始碼庫抓回來。

git clone https://github.com/fourdollars/x11-touchscreen-calibrator.git

然後是進到該原始碼目錄底下匯入已經釋出的 tarball

git-import-orig --upstream-vcs-tag=0.0 --upstream-branch=master --pristine-tar ../x11-touchscreen-calibrator_0.0.orig.tar.xz

上面這個指令會建立一個 commit 將 tarball 的內容 import 進去,並且建立一個 upstream/0.0 的 tag,只不過 master 也會指過去,所以再執行以下的指令倒回。

git reset --hard HEAD^

接下來是開始製作 Debian package 的部份,先建立一個 debian 的分支。

git checkout -b debian

然後在將 debian/ 這個目錄所需要的檔案都準備好,最後再 commit,然後就可以使用下面的指令來產生 Debian source package。

git-buildpackage --git-pristine-tar --git-debian-branch=debian -S --lintian-opts --profile debian

上面指令中的 `--lintian-opts --profile debian` 是在 Ubuntu 上面才需要加入的,如果在 Debian 裡面應該不需要使用。

另外,在還沒有完全準備好 debian/ 底下的檔案之前,也可以加入使用 `--git-ignore-new` 先試試看產生出來的 Debian source package 的品質如何,再決定要不要 commit。

等到這個 Debian package 已經成功被放進 Debian 官方套件庫裡面,就可以執行以下指令建立 debian/0.0-1 的 tag。

git-buildpackage --git-tag --git-pristine-tar --git-debian-branch=debian -S --lintian-opts --profile debian

最後就可以執行

git push --tags
將所有的 commit 跟 tag 都送回原本的 Git Repo 裡面。

參考文件:

2010年12月19日 星期日

在 Mac OS X 10.4.11 上使用 MacPorts 1.9.1 來建立 Perl 以及 Python 的開發環境

在安裝 MacPorts 1.9.1 之前要把 Xcode 裝好
然後去下載 MacPorts 1.9.1 來安裝
之後再使用 root 權限執行下面這段 script 就大功告成啦~ :D
gist: 747325
#! /bin/bash
# Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
# Mac OS X 10.4.11 + MacPorts 1.9.1 -- 2010/12/19

set -e -x

# Upgrade MacPorts
port selfupdate
port upgrade outdated || (port deactivate subversion && port clean subversion && port install subversion)

# Install Perl
port install perl5 +perl5_12

# Install Python
port install python27 +no_tkinter
port install python_select
python_select python27

# Install Vim
port install vim +perl +python27

# Install Git
port install git-core +python27

# Clean
port -u uninstall
以上這段 script 安裝了 perl/python/vim/git

2009年8月17日 星期一

Commit your git changesets into Subversion

Commit your git changesets into Subversion
  • First prepare your Subversion target folder, ex. http://svn.example.com/svn/git-backup
    $ svn mkdir --parents http://svn.example.com/svn/git-backup
  • Configure your git-svn on your original git working folder.
    $ git-svn init http://svn.example.com/svn/git-backup
  • Fetch Subversion changesets.
    $ git-svn fetch
  • Manually graft relationship.
    $ git show-ref git-svn
    8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e refs/remotes/git-svn
    $ git log --pretty=oneline master | tail -n1
    bcbd25a12642e98e1c54a8e51abacd85222b79a7 Your latest git commit log.
    $ echo "bcbd25a12642e98e1c54a8e51abacd85222b79a7 8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e" >> .git/info/grafts
  • Then push all git changesets into Subversion repository.
    $ git-svn dcommit
With Standard Layout
  • First prepare your Subversion target folder, ex. http://svn.example.com/svn/git-backup/{trunk,branches,tags}
    $ svn mkdir --parents http://svn.example.com/svn/git-backup/trunk http://svn.example.com/svn/git-backup/branches http://svn.example.com/svn/git-backup/tags
  • Configure your git-svn on your original git working folder.
    $ git-svn init --stdlayout http://svn.example.com/svn/git-backup
  • Fetch Subversion changesets.
    $ git-svn fetch
  • Manually graft relationship.
    $ git show-ref trunk
    8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e refs/remotes/git-svn
    $ git log --pretty=oneline master | tail -n1
    bcbd25a12642e98e1c54a8e51abacd85222b79a7 Your latest git commit log.
    $ echo "bcbd25a12642e98e1c54a8e51abacd85222b79a7 8ec71dda61a3a32d9cf0c00e51a0c1ca3ea39f0e" >> .git/info/grafts
  • Then push all git changesets into Subversion repository.
    $ git-svn dcommit

2009年5月4日 星期一

git format-patch --no-prefix -p

一般的 git diff 輸出長得像是這樣子
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6853012..baecc35 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,3 +9,4 @@ src/view/telnetview.cpp
 src/emoticondlg.cpp
 src/autologinpage.cpp
 src/downarticledlg.cpp
+src/pcmanx_gtk2.cpp
其中有 a/... b/... 實在不是很喜歡
改用 git diff --no-prefix 輸出就變成了
diff --git po/POTFILES.in po/POTFILES.in
index 6853012..baecc35 100644
--- po/POTFILES.in
+++ po/POTFILES.in
@@ -9,3 +9,4 @@ src/view/telnetview.cpp
 src/emoticondlg.cpp
 src/autologinpage.cpp
 src/downarticledlg.cpp
+src/pcmanx_gtk2.cpp
同樣的用法也可以使用在 git format-patch --no-prefix
From 66038b61719904c16147945d8c68a0773ef65846 Mon Sep 17 00:00:00 2001
From: jasonxh <jasonxh+c73c965c-c2fa-0310-9a63-82392b9be63f>
Date: Thu, 19 Feb 2009 05:58:15 +0000
Subject: [PATCH] 2009-02-18  Jason Xia  <jasonxh+gmail.com>

    * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix
    Simplified Chinese translation of "Line" and "Col".


git-svn-id: https://svn.csie.net/pcmanx/trunk@464 c73c965c-c2fa-0310-9a63-82392b9be63f
---
 ChangeLog           |    5 ++
 po/POTFILES.in      |    1 +
 po/zh_CN.po         |  174 +++++++++++++++++++++++++++------------------------
 po/zh_TW.po         |  167 +++++++++++++++++++++++++-----------------------
 src/pcmanx_gtk2.cpp |    2 +-
 5 files changed, 186 insertions(+), 163 deletions(-)

diff --git ChangeLog ChangeLog
index ffd2d02..ef74622 100644
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,8 @@
+2009-02-18  Jason Xia  <jasonxh+gmail.com>
+
+   * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix
+   Simplified Chinese translation of "Line" and "Col".
+
 2009-02-07  Youchen Lee  <copyleft+utcr.org>

    * src/mainframe.cpp: For availability to build under (gtk+ < 2.10),
diff --git po/POTFILES.in po/POTFILES.in
index 6853012..baecc35 100644
--- po/POTFILES.in
+++ po/POTFILES.in
@@ -9,3 +9,4 @@ src/view/telnetview.cpp
 src/emoticondlg.cpp
 src/autologinpage.cpp
 src/downarticledlg.cpp
+src/pcmanx_gtk2.cpp
不過 patch 檔前面會多一些統計資料也不是很喜歡
於是改用 git format-patch --no-prefix -p
From 66038b61719904c16147945d8c68a0773ef65846 Mon Sep 17 00:00:00 2001
From: jasonxh <jasonxh+c73c965c-c2fa-0310-9a63-82392b9be63f>
Date: Thu, 19 Feb 2009 05:58:15 +0000
Subject: [PATCH] 2009-02-18  Jason Xia  <jasonxh+gmail.com>

    * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix
    Simplified Chinese translation of "Line" and "Col".


git-svn-id: https://svn.csie.net/pcmanx/trunk@464 c73c965c-c2fa-0310-9a63-82392b9be63f

diff --git ChangeLog ChangeLog
index ffd2d02..ef74622 100644
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,8 @@
+2009-02-18  Jason Xia  <jasonxh+gmail.com>
+
+   * po/POTFILES.in, po/zh_CN.po, po/zh_TW.po: Update po files. Fix
+   Simplified Chinese translation of "Line" and "Col".
+
 2009-02-07  Youchen Lee  <copyleft+utcr.org>

    * src/mainframe.cpp: For availability to build under (gtk+ < 2.10),
diff --git po/POTFILES.in po/POTFILES.in
index 6853012..baecc35 100644
--- po/POTFILES.in
+++ po/POTFILES.in
@@ -9,3 +9,4 @@ src/view/telnetview.cpp
 src/emoticondlg.cpp
 src/autologinpage.cpp
 src/downarticledlg.cpp
+src/pcmanx_gtk2.cpp
因為老是會忘記這個用法,所以寫篇 blog 紀錄一下。:-P

2009年2月6日 星期五

在 Ubuntu 8.04.2 裡面設定自己的 git:// 分享給別人用

首先裝上 git-daemon-run
sudo aptitude install git-daemon-run
然後參考裡面的 /usr/share/doc/git-daemon-run/README.Debian

例如要將 /home/user/git/Project 這個已經是 git 的工作目錄分享出來
就執行
sudo ln -s /home/user/git/Project/.git /var/cache/git/Project.git
然後根據 Git Book - Setting Up A Public Repository 上面所提到的
要多做一個動作
touch /home/user/git/Project/.git/git-daemon-export-ok
最後就是重新啟動 git-daemon
sudo sv restart git-daemon
這樣別人就可以透過
git clone git://XXX.XXX.XXX.XXX/git/Project
來一起協同工作啦~ :D
這種方法在區域網路裡面分享程式碼特別快速方便~ ^o^

2009年1月15日 星期四

以 meld 當外部程式來使用 git diff

首先要建立一個簡單的 shell script

/usr/local/bin/git-meld
#!/bin/sh

meld $2 $5
然後執行
git config --global diff.external /usr/local/bin/git-meld
接下來就是爽爽地用 meld 來看 diff 囉~ :D