05 Apr 2014, 06:02

Proxy 配下で git を利用する方法, ほか

掲題のとおり, proxy 配下で git を利用する方法について調べてみました.

[toc]

設定方法

結論からいうと, 以下のコマンドを叩く.

git config --global http.proxy http://proxy.example.com:8080

これによって, ~/.gitconfig ファイルに以下の行が追加される.

[http]
proxy = http://proxy.example.com:8080

認証付きプロキシの場合

場合によっては, ユーザ名とパスワードが必要. 以下のように打ち込む.

git config --global http.proxy http:// (ユーザ名):(パスワード)@proxy.example.com:8080

ユーザ名とパスワードを.gitconfig に書きたくない場合は, 別ファイルに記述を独立させて, 読みこむ.

[include]
path = ~/dotfiles/.gitconfig.local

SSL エラー回避

error: SSL certificate problem, verify that the CA cert is OK. Details:みたいなエラーがでで失敗するときは, SSL を無向にしてやる. .gitconfig に以下を追加.

[http]
sslVerify = false

gitsubmodule をプロキシ配下で実行

git submodule は git プロトコルで実行されるので, プロキシ配下だと失敗することがある.

以下を実行することで, git プロトコルではなくて, http プロトコルでアクセスする.

$ git config --global url.http://github.com/.insteadOf git://github.com/

01 Sep 2013, 07:53

EclipseとGithubを連携させるプラグイン『EGit』を利用して、新しいリボジトリを作成する手順メモ

Githubにローカルリポジトリを登録する方法は以前調べました。

今回、Eclipseで管理しているプロジェクトをそのままGithubにアップロードしたかったので、その手順をメモします。

環境

  • Eclipse 4.3 Kepler
  • git 1.7.9

Egitプラグインをインストール

まだEGITがはいっていない場合は、インストールする。たぶん、デフォルトで搭載されているはず。

ローカルリポジトリの作成

Git管理したいプロジェクトを右クリックして

  • チーム -> プロジェクトの共用 -> Git -> 次へ
  • プロジェクトの親フォルダ内のリポジトリを使用または作成をチェック
  • 完了を選択。

これで、すでに.gitがある場合はそれをEclipseから見ることができ、.gitがない場合は新規作成されます。

無視するフォルダを選択して、チーム -> 無視 を選択。これで、.gitignoreにフォルダが登録されます。

  • .setting/org.eclipse.jdt.core.prefsはEclipseの設定ファイルなので、無視。
  • .classpathはビルド時の外部jarのパスがかかれたファイルなので残す。
  • .projectはEclipseプロジェクトの設定ファイルなので、残す。

.gitignore

/bin
/.settings

最後に、初回commitをしましょう。チーム -> コミットでコミットする。

githubにリポジトリリポジトリ作成

githubにリポジトリを作成します。詳細は、以前の記事と同じなので、省略。

ここでは、リモートリポジトリになにも作成しません。

EclipseとGithubを連携する

Githubにpushします。

チーム -> リモート -> プッシュを選択。

URIの欄に、HTTPSのURLを選択

https://github.com/tsu-nera/coursera-algorithms-part1.git

あとの欄は勝手に入力される。

続いて、ref mappingの設定。ここでは、ローカルのmaster branchに、リモートのmasterブランチを対応させる。

  • ソース参照 refs/heads/master
  • 宛先参照 master

これで、プッシュできるようになりました。

つづいて、プルの設定。

チーム -> リモート -> 次から取り出しを選択。

続いて、ref mappingの設定。ここでは、ローカルのmaster branchに、リモートのmasterブランチを対応させる。

  • ソース参照 refs/heads/master
  • 宛先参照 refs/remotes/origin/master

これで、フェッチを選んでもリモートから取れなくて、プルを選択するとリモートから取得できる。このへんは理由がよくわからない。

ちなにみ、作業中に以下のエラーがでた。

現在のブランチはプル用に構成されていません
構成にキー branch.master.merge の値がありません

以下のサイトを参考に解決。

17 Jun 2013, 13:57

cronとwatchrを使ってJenkinsからオレオレリポジトリ監視してみる

はじめに

Jenkinsを利用てリポジトリ監視をしたい。しかし、自分が利用しているSCMは社内独自ツールという、

(´・д・`)

なカンジなので、Jenkinsのプラグインがなかった。しかたがないので、こんな方法でなんとかならないか考えた。

  • cronを利用して、5分毎にローカルのリポジトリをアップデートする。
  • watchrを利用して、ファイルの変更を監視。
  • wgetを利用して、Jenkinsのジョブをキックする。

[toc]

今回利用するもの

  • CentOS
  • git
  • Jenkins
  • crontab
  • watchr

cronで定期リポジトリ更新

5分毎にローカルで持っているリポジトリを更新する。5分毎の定期実行はJenkinsを利用てもいいけど、これはバックグラウンドで動かしたいので、cronを利用しようと思う。

まずは、crontabに実行したいコマンドを記述する。以下のコマンドでエディタが開きます。

% crontab -e  

cronの記述方法は

「分」「時」「日」「月」「曜日」 [実行コマンド]

詳しくは、以下を参照。

crontabの書き方 — server-memo.net

「/」を利用すると、間隔を指定できる。たとえば、5分毎にコマンドを実行するには、以下のように書く。

*/5 * * * * git pull 

せっかくならば、JenkinsのJobを使ってもよい。その場合は、古いビルドの破棄にチェックを入れて、ビルドの最大保存数を制限する。Jenkinsで5分定期を動かす記法はcronと同じ。

*/5 * * * *

watchrを利用して、ファイルの変更を監視

ファイルに変更があったかどうかを監視するためのrubyスクリプトでwatchrというものがある。これで、ファイルの変更を見つけたらJenkins Jobをキックしてみる。(ちなみに、pythonだとwatchmedo)

[tsu-nera]% gem install watchr
Successfully installed watchr-0.7
Parsing documentation for watchr-0.7
1 gem installed

設定ファイルに監視のルールを書く。設定ファイルの書き方は、Readmeが参考になる。

以下のように、監視したいファイルを正規表現で、監視に引っかかったファイルに対して、実行したいコマンドを書く。

watch( 'test/test_.*\.rb' )  {|md| system("ruby #{md[0]}") }
watch( 'lib/(.*)\.rb' )      {|md| system("ruby test/test_#{md[1]}.rb") }

wathcrコマンドに設定ファイルを渡して実行する。

bash-4.1# watchr git.watchr &

wgetを利用して、Jenkinsのジョブをキック

wgetでURLを指定すると、Jenkinsのジョブを実行することができる。

$ wget --http-user=<ユーザ名> --http-password=<パスワード> http://yourserver.com/job/<ジョブ>/build?token=<トークン名>

以下の過去記事も参照。

今回はコレ。

wget --no-proxy --http-user=tsu-nera --http-password=*********** http://192.168.118.130:8080/job/vxUnit/build?token=vxunit_token

まとめると、watchrに渡す設定ファイルは以下のようになる。

watch( 'src/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }
watch( 'test/*.[ch]' )  {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** http://localhost:8080/job/vxUnit/build?token=vxunit_token") }

25 May 2013, 12:45

Cygwinでgit push時にパスワード入力を省略する方法

Cygwinでgit pushするとき、いちいちパスワードをうつのが面倒だ。なにか回避方法がないものか?

普通の(Linux)の場合、$HOME/.netrcに以下を追加すればよいらしい。

machine github.com
login tsu-nera
password ****************

 

ただし、Cygwinではうまくいかず、_netrcという名前にしろとあったり。

これでもうまくイカなかった。しかたがないので、expectコマンドを使って、パスワード入力を自動化した。

追記

名前は.netrcにして、アクセス権限を変更したらうまくいくようになった!!

chmod 600 ~/.netrc

git clone https://ID@HOST/… できない場合の暫定対策 – iWA’s 雑記@はてな出張所

12 May 2013, 11:58

自分のプログラミング開発環境の歴史を記録する!githubで設定ファイル(dotfiles)をクラウド管理する方法

はじめに

最近は、bashやらemacsをいじることがおおい。設定ファイルを自宅のPCとノートPCの間で同期するようなよい方法はないものかと思った。また、会社でも自宅の設定がふとみたくなったとき、涙をのんでほぞを噛みつつ定時退社の夢を見ている。

そんななか、githubに設定ファイルをバックアップ&同期する方法を見つけたので、やってみた。

なお、元ネタはこの本です。最近、熱中して読んでいる。チョーオススメ!!

 

githubにバックアップする方法

dotfilesディレクトリに設定ファイルを移動

設定ファイルを一箇所にあつめて、そこでgitリポジトリを作成します。

$ mkdir dotfiles
$ cd dotfiles/
$ mv ~/.emacs.d/  .
$ mv ~/.bashrc .

シンボリックリンク作成

次に、dotfilesディレクトリからホームディレクトリに対して

シンボリックリンクを作成

します。これが、githubで設定ファイルを管理するためのキモです。シンボリック作成は以下のコマンドで行けます。

$ ln -s ~/dotfiles/.emacs.d ~/

$ ln -s ~/dotfiles/.bashrc ~/

ただし、量が多くなると大変なので、シェルスクリプトを書きました。

 

git リポジトリ作成&github連携

gitリポジトリを作成して、githubと連携します。githubとの連携はいつもの方法です。過去記事もどうぞ。

githubに新しいリポジトリを作成してローカルのリポジトリをアップロードする | Futurismo

あらかじめ.gitignoreを作成しておきます。とりあえず、こう書いとく。多分、変える。

# All Ignore
*


# Except
# Emacs
!/.emacs.d/init.el
!/.emacs.d/conf
!/.emacs.d/elisp
!/.emacs.d/public_repos

!/.bashrc
!/.gitconfig
!/.gitignore
!/.screenrc
!/.minttyrc
.

いつもの手順でgithub連携。

$ git init
$ git add .
$ git ci -m"first commit"
$ git remote add origin https://github.com/tsu-nera/dotfiles.git
$ git push -u origin master

https://github.com/tsu-nera/dotfiles.git

おわりに

githubを使うことで、自分の開発環境に対するカスタマイズの歴史を、もっといってしまえば自分のプログラミングに対する歴史を記録することができる。そんなところがとても気に入った。

この開発環境の歴史を、5年後、10年後に見直したら、きっと楽しいだろう。これは、自分のプログラミングのライフログだ。

02 May 2013, 12:26

Visual Studioプロジェクトでの版数管理で無視する.gitignoreメモ

Visual Studioをいじりはじめた。いろいろと不明な拡張子がある。gitで版数管理をするためには、.gitignoreを作成する必要があるのだけれども、なにがなんだかわからないので、ちょっと整理。

*.snoについて

プロジェクトディレクトリに*.snoができる。これは、各開発者が IDE に行ったカスタマイズか入っている。不要。

*.userについて

プロジェクトのディレクトリ配下に、.csproj.userや*.vbproj.userができる。

これは、開発者固有のプロジェクト オプション、および参照されるアセンブリを設定するために IDE が使用する任意の参照パスが含まれている。不要。

ipchとsdfについて

これは VS2010からデキるようになった、キャッシュデータベースらしい。けっこう容量を食う。検索やインデックスなどなど、さまざまな情報をあらかじめ蓄えておく役割があるみたい。不要。

その他、ビルドしたときに作成される DebugとReleaseもいらないな。(その中に含まれるexeファイルも)

というわけで、30分くらい調査した結果はこうなった。ベースは、github上のC++の.gitignore。

https://github.com/github/gitignore/blob/master/C%2B%2B.gitignore

もう少し変更するかも。

 

参考

21 Apr 2013, 11:32

githubに新しいリポジトリを作成してローカルのリポジトリをアップロードする

ローカルで書いたコードをGithubに上げる方法を人生のウチでもう3回も調べている気がするので、ここらでメモしておきます。ああ、モノ忘れが激しい。。。

ローカルでgit リポジトリを作成して作業

リポジトリを作成して、いろいろほげほげ作業します。今回は、このリポジトリをgithubで公開したいとする。

$ git init

githubとの間でSSH通信を確立する

githubとローカルPCをつなぐ通信はSSH通信を利用します。なので、まずは鍵を生成。sshがどうもパソコンに入っていな場合は、もってこよう。詳しくは、ここの過去記事を参照のこと。

SSHを使いこなそう!Windows上のCygwinからvmware上のUbuntuにパスワードなしでSSH通信するまでのまとめ | Futurismo

(この記事のせいでローカルで持っていた鍵が紛失したため、githubとの設定を今やり直している。。。(T_T))

鍵を生成します。ここではRSA暗号方式を利用する。パスワードはとりあえずなしで。

$ ssh-keygen -t rsa

.ssh/配下にid_rsa(秘密鍵)と、 id_rsa.pub(公開鍵)が生成される。id_rsa.pubをgithubに登録する。

ブラウザからgithubにアクセスする。

GitHub

ログインして上のツールバーから[Account Setting] > [SSH Keys] > [Add SSH key]を選択する。

github

鍵を入力する画面が現れるので、titleとkeyを入れる。ここでのkeyはid_ras.pubを入れる。

$ cat id_rsa.pub

[Add Key]を押すと、githubアカウントのパスワード入力が求められるので入力して完了。登録が完了すると、登録完了メールが飛んでくる。

github上にリポジトリを作成

githubにローカルと連携したいリポジトリを作成する。ツールバーの[Create Repositry]を選択。リポジトリ名を入力して、詳細の説明を入力。

Public/Privateで公開と非公開を選択できる。

Initialize this repository with a READMEにチェックを入れるとREADME.mdというファイルが作成される。リモートとローカルの連携がややこしくなるので、初めはチェックをいれない。

Add .gitignoreで.gitignoreの選択もできるが、すでにローカルで.gitignoreがあるので、ここではNoneを選択。

ここでは、embedded_testing_with_unity_and_cmockという名前のリポジトリを作成する。[Create Repositry]を選択して作成。

github2

作成すると、クイックセットアップの方法が表示される。

image

ここでは、既存のリポジトリをコマンドラインでgithubにアップロードしたいので、以下を実行する。

$ git remote add origin git@github.com:tsunera/embedded_testing_with_unity_and_cmock.git

このコマンド、によってoriginがこの長いURLであることを覚える。あとは、git pushコマンドで、ローカルリポジトリをgithubにブッシュして完了。

$ git push -u origin master

24 Feb 2013, 22:19

[本]Jenkins (オライリー・ジャパン)を読んだ読書メモ

オライリー社から出版されている[Jenkins](かえる本)を読んだ読書メモです。

 

トピック満載な網羅的説明

この本を読んで思ったことは、

とにかく詳しい

です。 400p近くあり、けっこう分厚いです。
インストール方法、設定方法も、いろんなOSに対する方法が書かれています。
(Ubuntu,OpenSUSE,Redhat,CentOS,Windows….etc.)
手とり足取りといった感じです。

言語はJavaをベース。ただ、多言語への言及も詳しいです。

コード品質のためプラグインの解説、通知方法なども、網羅的に様々なものが紹介されています。 つまり、これ一冊あればなんでも載っているような印象を受けました。

高度な話題としては、分散ビルドや自動化デプロイメント、継続的デリバリなども取り扱われています。(熱を入れて解説されています)このへんは個人的にはよくわかりませんでした。

gitによるJenkinsの使い方の解説が詳しい

版数管理については、Subversionとgitによる解説がされています。

Gitの説明が詳しくて重宝しました。Git Pluginの設定方法が細かく説明されていました。
gitとJenkinsを組み合わせようとすると、ネット上の情報が頼りでした。
他の書籍では、ここまで詳しくはないです。

継続的インテグレーションの目的を明確に

以下、印象に残ったフレーズの覚書。

継続的インテグレーションとは、フィードバックを素早く返すようにすることで、リスクを低減させるものです。

定期的にビルドジョブを走らせる方法は、実際には継続的インテグレーションではありません。

とくに先週は、静的解析ツールを実行しわすれたばっかりにけっこう泥沼にハマってしまったので、そんな体験を思い出す度に、フィードバックを速く返すことの重大さを意識するのだった。

おまけ

なお、この本はネットでも無料でダウンロードできるみたい。(英語だけど)

Download Jenkins: The Definitive Guide

 

 

 

11 Feb 2013, 22:35

gitを使って技術書を写経をするためのステップメモ

技術書の写経について、TDDで有名な@t_wadaさんのこんなツイートを発見した。

https://twitter.com/t_wada/status/9000231741

これを参考に、gitを使ってどのように写経をするか、個人用にまとめメモしとく。

ローカルで使えるSCMを用意

$ git init
$ git add .
$ git commit -m ‘first commit’
$ git checkout -b 1st

章ごとに”xst”というブランチを切っておく。

「ほんたった」などで対象の本を固定

たいていのお手本は電子書籍を利用するので、特に不要。
電子書籍化されていない写経本はScanSnapで電子化する。

ひたすらサンプルコードを写して実行

ガンバァ━━(`・д・´)ノ━━!!る

実行するたびにコミット(コミットログにページ番号を含める)

$git commit -m”xx”

xxはページ番号。加えて、コメントも書いてもよい。

疑問点があったらコミットログや本に書き込む

電子書籍を使っているので、Acribatのコメント機能を使って書き込んでしまいます。
コメントがあとで検索で引っかかるのが快適。

章ごとにタグを打つ

成果をmaster branchにマージ

$ git checkout master
$ git merge 1st

master branch にもどって、1st branchをマージする。

章ごとにタグを打つ

$ git tag -a -m ‘1st end’ 1st

章ごとにタグを打つ。節や区切りがいいところまででもいい。

githubにも反映

$ git push origin master

git pushでローカルからgithubに反映する。(githubとの連携はここでは省略)

新しい章に移るごとにブランチを切る

$ git checkout -b 2nd

 

以下、手順を繰り返して章ごとにイテレーションしていく。
今年の目標ははたくさん写経することなので、ガンバァ━━(`・д・´)ノ━━!!ります。

02 Dec 2012, 11:01

git commitをフックしてJenkins でビルドを起動

gitでリボジトリへコミットすると、それをJenkinsが検出して、ビルドを実行する仕組みを入れてみた。

[toc]

通知にするべきかポーリングにするべきか、それが問題だ。

調べてみると、gitのCommitからJenkinsにビルドさせる方法は2つあるっぽい。

  • git commit時にJenkinsに通知する方法
  • Jenkinsがgitリボジトリを定期的にポーリングする方法

通知だと、gitのフック機能を利用して、簡単に実現できる。

ポーリングだと、Jenkins GIT Pluginを使って実現できる。

通知方法だと、branchごとにビルドを起動できないという弱点がある。

今回は、post-commitの方法を利用する。(というより、ポーリングは挫折した)

環境

  • Windows 7 64bit
  • Cygwin

wgetでJenkinsのジョブをキックする

Jenkinsトークンを利用して、リモートからビルドキック

コマンドラインからJenkinのジョブを起動するには、wgetコマンドを使う。

リモートから、jenkinsにアクセスするためには、管理画面からトークンの設定をしておく。

  • 設定 => ビルドトリガ => リモートからビルド
  • 認証トークンで任意のトークン名を記述

これで、JENKINS_URL/job/vxUnit/build?token=TOKEN_NAMEというURLでリモートからキックすることができるようになる。Jobの実行をアカウントを持つユーザのみにしている場合は、–http-user/–http-passworオプションをつける。まとめると、

wget --http-user=<ユーザ名> --http-password=<パスワード> http://yourserver.com/job/<ジョブ>/build?token=<token名> 

git post-commmitの設定

.git/hooks/配下にあるpost-comitファイルに以下の行を追加。 http://localhost:8080の部分は、自分の環境に読み替えてください。

wget --no-proxy http://localhost:8080/job/(ジョブの名前)/build?delay=5sec

post-commitがなければ、新規作成して、実行権限を与える。

touch post-commit
chmod a+x post-commit

post-commit例

#!/bin/sh    
echo "Hook post-commit start"
wget --no-proxy <a href="http://localhost:8080/job/4th_ginnan/build?delay=5sec">http://localhost:8080/job/4th_ginnan/build?delay=5sec</a> || echo "wget failed"
echo "Hook post-commit end"

あとは、git commitを実行すれば、Jenkinsに通知が飛んで、Jobが実行された。

参考:

コマンドラインからJenkinsのジョブを実行する – azuki note