Posts Tagged ‘Git’

Git リモートリポジトリをガツンと巻き戻す

かなり悩んで時間がかかったのでメモを残しておきます。
前提条件として、基本、Git Flowベースで作業しています。

不幸なことにガンガン開発を進めていたdevelopブランチをmasterブランチの状態まで巻き戻すことに。masterブランチにはhotfixが入ってたりもします。

調べて調べて、悩んで、相談して、調べて、以下のような手順で作業することにしました。

hotfix前のdevelopまで戻す。

$ git reset --hard 巻き戻すコミットのハッシュ

リモートのdevelopリポジトリを同じ所まで巻き戻す。

$ git push -f origin HEAD:develop

そして、hotfixについてはmasterから対象のコミットをチェリーピックでマージしてリモートリポジトリにpush(Souce Treeでやりました)。

そして、開発者諸氏にdevelopブランチをリモートから取り直すように連絡(忘れずに!)

加えて、このプロジェクトでは開発用サーバーにdevelopリポジトリから

$ git pull -rebase

でデプロイしているので、開発用サーバーのdevelopリポジトリもローカルと同じコマンドでリセットしてデプロイしなおしました。

Facebooktwitterlinkedintumblrmail

SourceTree for Windowsで秘密鍵と公開鍵を生成!

前回は SourceTree for Windows をインストールしましたが、それだけではGitは使えません~。
ほとんどのGitサーバーでは、SSHの公開鍵認証を使用しています。

SourceTreeでは「秘密鍵」と「公開鍵」を簡単に生成することが出来ます。
以下手順です。

1、”Tools” > “Create or Import SSH Keys”を選択します。

2、PuTTY Key Generatorが開くので、”Generate”ボタンをクリックし、鍵を生成します。


“Generate”ボタンをクリックすると、鍵が生成されるはずなのですが…


なんだこれ…すっごい遅い…ウ ゴ カ ナ イ !
と思ってたら、乱数を作るためにマウスでこの辺りを


ぐるぐるぐる~ぐちゃぐちゃ~っっとやると、あっという間に終わります(笑)
最初はこれを知らずに、無駄に待ち続けました…。

3、”Save Private Key”をクリックし、秘密鍵を保存します。


私は”id_rsa.ppk”という名前で保存しました。
特に決まりはないそうですが、自分がわかりやすいものでいいと思います。

秘密鍵は、その名の通り自分以外には知られてはいけません。秘 密 で す (*_*)
人に見せたり、紛失したりしないよう管理しましょう。

4、”Save Public Key”をクリックし、公開鍵を保存します。


こちらも特に決まりはないので、”id_rsa.pub”という名前で保存しました。

コメントの記入やパスワードの設定を行いたい場合は
“Key comment”、”Key passhrase”に、それぞれ入力してください。


5、鍵を登録します。
“Tools” > “Launch SSH Agent(pageant)”を選択します。
先ほど保存した秘密鍵(“id_rsa.ppk”)を選択すると、鍵が登録されます。
(パスワードを設定した場合はパスワードの入力を求められます)

サクサクサクっと鍵の設定完了ですー(´∀`)

Facebooktwitterlinkedintumblrmail

SourceTree for Windowsをインストールしました!

SourceTree for Windowsがリリースされたのでインストールしてみましたー。

beta版の試用を申し込んだまま、作業に区切りがつくまでは…とか言ってズルズル放置してましたが
やっとインストールしました~(´∀`;)

GitGuiもGitHubもソースの一部が消失するなどのトラブルが続いたのでもうさよならバイバイ。
Git初心者な私にとっては、トラブルは避けたいところなのです(;´Д`)

ちなみにWindows7以上でないとインストールできないようです。
折角なのでインストールの一連の流れを、私のような初心者のために…。

SourceTree for Windowsをインストールするにあたり、とりあえずGitと名の付くものは
片っ端からアンインストール+削除しました。

さっぱりしたところで、SourceTree for Windowsのインストーラーをダウンロードします。

以下のページからダウンロードできます。
http://www.sourcetreeapp.com/

インストーラーを起動すると「Git本体はどうしますかー?」と聞かれます。

私は既に全部削除しちゃったので、一番上の
“Download an embedded version of Git for SourceTree alone to use”を選択しました。
既にインストールしている場合はスルーされるようです。

Git本体のインストールを行うとセットアップ画面が表示されます。

名前とアドレスを入力し、規約に同意できれば”I agree to the SourceTree license agreement”
にチェックを入れ、”Next”をクリックします。

AtlassianのBitbucket, Stashを使用している場合は、そのままアカウントのサインアップができます。

使用してなければ”Finish”をクリックし、インストール完了です!!

次回は「鍵」を作成します(´∀`)ふっふっふ。

Facebooktwitterlinkedintumblrmail

CUI な Git ブラウザ tig を Homebrew で入れてみた

『CUI な Git ブラウザ tig を入れてみた』 を見て便利そうだったので Homebew にないかなーと。

$ brew search tig
tig         tiger-vnc

あった。

$ brew install tig
==> Downloading http://jonas.nitro.dk/tig/releases/tig-0.18.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/tig/0.18
==> make install
==> make install-doc-man
/usr/local/Cellar/tig/0.18: 8 files, 248K, built in 12 seconds

サックリ完了。

$ which tig
/usr/local/bin/tig

はいってるはいってる。Gitのワークツリーに移動して

$ tig

起動!

日本語も出てるし大丈夫っぽい。変更を追っかけるのに便利な感じ。

使い方がわからなくなったらhを押すとヘルプがでるので困ったらhと覚えてれば大丈夫(たぶん)。

Facebooktwitterlinkedintumblrmail

これだけで一応使える git-svn 入門

やぁやぁ、村部です。

分散バージョン管理はBazaarをずっと使っていましたが、世の流れには逆らえず現在やっているプロジェクトではGitを使うことにしました。

ソースコードを管理するのであればGitは強力ですしね。EclipseでもNetbeansでも使えるのも魅力。

ただし、中央リポジトリはSubversionです。ドキュメントも同じリポジトリ管理したいのでSubversionが便利なのです。

既に社内でgit-svnでの運用実績もありますので安心(Bazaar使いたい時はbzr-svnでやれますしね)。

社内Git派閥の方に聞いた所「基本trunkでやるなら下記覚えておけばOK」とのこと。

## ローカルでのコミット
git add .
git commit

## SVNへのコミット
git svn rebase  #一旦SVNのリポジトリから取り込み
git svn dcommit #ローカルの変更を反映

しばらく使ってみて不便に感じたのが git commit 直後でないと git svn rebase や git svn dcommit ができないこと。すこしでも修正しているとだめ。 タースーケーテー

「git stash があるよ」

変更を退避するコマンドだそうです。てなわけでSVNへのコミットの基本はこんな感じ。

git stash save -u #commitしてない変更を退避
git svn rebase
git svn dcommit
git stash pop #退避から取り出し

git stash save の -u オプションは –include-untracked の省略形。add していない変更も退避します。
「このオプションを付けてないとよくわからないトラブルになりがち」だそうなのでつけときましょう。

以上、これだけで一応使える git-svn 入門でした。

※2012-03-21 追記
git stash save の -u オプションについてですが、新しいファイルを作成、編集してるときにadd前にこのオプションをつけて save すると pop 時にコンフリクトすることが多いです。その場合コンフリクトを解消するにはコンフリクトしているファイルをすべて削除(または他の場所に移動)して再度 pop します。正常に pop する前に git stash drop すると編集していたファイルを失って泣くことになるのでご注意を。
ということで一概に -u をつけたほうがいいとは言えないようです。

Facebooktwitterlinkedintumblrmail

WordPressをGitで管理する時の.gitignore

現在進行中のプロジェクトにて、WordpressをGitで管理しているのですが、
その際の.gitignoreを晒しておきます。
基本的にはwp-contents/uploads(投稿画像など)以下を除外しておけばOKです。

wp-config.php
wp-content/uploads/*
!wp-content/uploads/wptouch/

最後の行がミソで、uploads以下は除外したいけども、プラグインWPtouch用のカスタムアイコンがここに置かれるので、
それはコミットしたい。そういう時は「!」で否定してあげればOKです。

敢えて今回はwp-content/plugins等はGitで管理下においていますが、シチュエーションに合わせましょう。

Facebooktwitterlinkedintumblrmail

Gitでブランチのコミット数とか

既存ブランチのコミット総数

git log --pretty=oneline | wc -l

派生先ブランチでの派生元からのコミット数

git log --pretty=oneline branch1..branch2 | wc -l
Facebooktwitterlinkedintumblrmail

Gitで短すぎるコミットログを禁止する

コミットコメントを意地でも書かせたい

http://d.hatena.ne.jp/kanu-orz/20100531/1275279046

上記を見て感化されたので、Gitで短すぎるコミットログのコミットを禁止するhookを書きました。

#!/usr/bin/env ruby

#place this file in .git/hooks/commit-msg

MIN_LENGTH = 10

log = File.readlines(ARGV[0]).grep(/^[^#].+/)
length = log.to_s.split(//u).size - 1

if length < MIN_LENGTH
  system('say Way way wait')
  puts <<-EOS

##################################################################
このコミットは許しません!

1行目   [変更した理由、目的を簡潔に]
2行目以降 [必要ならば詳細を]

最低でも何故変更したのかのを、
未来の自分と保守担当者に向かって書きましょう。

コミットログは未来の自分へのメッセージです。
今は不要に思っても、未来にはきっと役に立ちます。

#{length}文字しかありません。
有効なメッセージを#{MIN_LENGTH}文字以上
##################################################################
  EOS
  exit 1
end

せっかくMacなのでsayコマンド使ってAlexさんにしゃべらせてます。
ちなみにコミットログはcommit-msgスクリプトの第一引数に.git/COMMIT_EDITMSGというファイル名が渡ってきますので、それを覗いてやれば参照できます。

Facebooktwitterlinkedintumblrmail