ラベル Git の投稿を表示しています。 すべての投稿を表示
ラベル Git の投稿を表示しています。 すべての投稿を表示

2012年7月1日日曜日

gitによる開発フロー

・設定

エディタをviからemacsに変更
git config --global core.editor 'emacs'

・開発フロー
A successful git branching model をベースに開発を行う場合の手順。
http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html

・管理者
gitリポジトリをまずつくる
git init

touch README

git add README

git commit -m "initial commit"

git remote add origin http://xxxxxx/xxx.git

git push origin master

developブランチをつくる
git checkout -b develop

developブランチをremoteリポジトリにpush
git push origin develop

・開発者
develop ブランチをブランチしてfeature1を開発する場合

remoteのdevelopブランチをチェックアウト
git checkout origin/develop -b feature1

commitする
git commit -m ""

commitをまとめる
git rebase -i HEAD~5

developの変更を取り込む
git pull --rebase origin develop

競合の解決をする

競合を解決したファイルをadd
git add

rebaseを完了させる
git rebase --continue

pushする
git push origin feature1


2012年4月22日日曜日

Git道場に参加してきた

Git道場に参加してきました Gitを使うにあたっての心技体を体で覚えるというまさに道場スタイル。

最初にGitの心得についての講演があり、その後はほぼずっと実習でした。

Gitの使い方とかの説明はほとんどなかったので初心者の方にはつらかったかも。

実習は2段階。

まず最初の実習では10行のテキストを4〜5人で各自1commitしてはpushするといったものでした。
少ない行数のテキストを編集するのでもちろんコンフリクトの嵐で、誰かがpushしてはpullしてきてコンフリクトが発生して うがー と言いつつコンフリクトを直してcommitしなおすという作業を延々と行いました。

その結果こちらのネットワーク図の前半部分のようにカオスなネットワークができあがりました。
https://github.com/git-dojo/team06/network

これはコンフリクトを解消するたびにマージを繰り返しているのでどんどんぐちゃぐちゃになってしまっています。

これをもっとまっすぐにしたいですよね?

というのが2つ目の実習。

内容はまったく1つ目と同じことをするのですが、pullする際に、単にpullするのではなく、pull --rebaseします。そしてコンフリクトが発生したら修正してaddし、その後これまでのようにcommitするのではなく、rebase --continueすることでマージせずにリベースすることができるのできれいなネットワーク図ができあがるのです。

これまではずっと一人で使っていたのでコンフリクトとかほとんどきにすることがなかったので、こういうことが起こることを全く考えていなかったのでとても役に立ちましたし、嫌になるほどpull --rebaseとrebase --continueしたので体にしみつきました!




以下メモ

git reflogで作業履歴がみれる(ただし90日以内かつgit GCされていないこと)
git GCをとめるには git config --global gc.auto 0
git log --graph --pretty=oneline でネットワーク図が出せる
git commit -> git pull --rebase -> conflict発生 -> 直す -> git add -> git rebase --continue
git rebase --continueせずにcommitしてしまった場合はrebase --skip する
mergeとrebaseはどちらも利点、欠点があるので使い分ける
mergeはどこでミスったかわかりやすい
基本rebaseでブランチはmergeというのがいいかも

2012年2月19日日曜日

ubuntu 11.10にGitoriousをインストール

だいたいここのをそのまんまでできましたが、はまったりして2時間ほどかかりました・・
http://coding-journal.com/installing-gitorious-on-ubuntu-11-04/

手順と違ったところ

その1
passenger.loadのpassengerのバージョンが私の環境だと3.0.9ではなく、3.0.11だったので変更しました。
    LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
    PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.9
    PassengerRuby /usr/bin/ruby1.8


その2
ここでエラーがでました
export RAILS_ENV=production && \
    bundle exec rake db:create && \
    bundle exec rake db:migrate && \
    bundle exec rake ultrasphinx:bootstrap


・対処方法
rootにsu

1. git clone git://github.com/roman/rots.git
2. cd rots && gem build rots.gemspec && gem install rots-0.2.1.gem
3. rm -rf /usr/lib/ruby/gems/1.8/bundler/gems/rots-babb5559aae8
4. このファイルを編集 /var/www/gitorious/Gemfile:
この行を gem “rots”, :git => ‘https://github.com/roman/rots.git
これに変更 gem “rots”, “~> 0.2.1″
5. これを実行 bundle install && bundle pack

んでgitにsuして、export RAILS_ENVからやり直せばOK

その3
Apacheのホスト設定を/etc/apache2/httpd.confに記述する必要があります.

<VirtualHost *:80>
ServerName (ホスト名)
DocumentRoot /var/www/gitorious/public
</VirtualHost>

これで localhost:80 を開いて表示されればOKなはず。

その4
リポジトリが生成できない。。

Webページからリポジトリを作成しても This repositories is being created...
がいつまでたっても終わらないというもの。

以下を実行したら解決

env RAILS_ENV=production script/poller start

2011年10月23日日曜日

Scientific Linux 6.1でgit serverを立てる

CentOSのアップデートが最近遅いので
ScientificLinux6.1を使ってGit Serverを立ててみた。(UbuntuでもOKでした)

ざっと調べたところ gitosisとgitoliteというのが2つあったが、前者のほうは開発が止まっているようだったのでgitoliteを使うことにした。

必要な環境
・クライアント(MacかLinuxが楽。Windowsのやり方はここでは紹介していません)
・サーバー(Linux系だったらだいたいOKだと思います)

事前準備
・クライアント、サーバー共にgitをインストールしておく

以下手順サーバー側とクライアント側の作業があるので気をつけてください

サーバー


まず gitolite という名前でユーザを作成。GUI(system->administration->Users and Groups)を使って
やると簡単にできます。
コマンドでやる場合は,
> useradd gitolite
> passwd gitolite


あとsshのキー保存用のディレクトリを作っておきます
> su gitolite
> mkdir ~/.ssh

クライアント


> ssh-keygen -t rsa
でsshのキーを作成します。
保存場所や名前はデフォルトでよいです。パスワードは任意。


この結果 ~/.ssh/以下に id_rsa, id_rsa.pubが生成されます。
前者が秘密鍵で後者が共通鍵です。
ここで名前を変えておきます。 {user_name}は自由に決めてください。
> mv id_rsa {user_name}
> mv id_rsa.pub {user_name}.pub


次に共通鍵をサーバーに保存します。{server_name}はサーバーのホスト名かipアドレス。
> scp ~/.ssh/{user_name}.pub gitolite@{server_name}:/home/gitolite/.ssh


(connection refused ではじかれた場合はサーバー側のsshdが動いていないか設定がおかしいかなのでなおす)


sshでログインできるか確認
> ssh gitolite@{server_name}
ここで特に
The authenticity of host can't be established ...などと出なければOKです。

サーバー


> su gitolite
> cp ~/.ssh/{user_name}.pub /tmp
> cd ~
> git clone git://github.com/sitaramc/gitolite
> cd gitolite
> src/gl-system-install
> vi ~/.bashrc
PATH="$PATH":/home/gitolite/bin
を追加
> source ~/.bashrc
> gl-setup /tmp/{user_name}.pub
hit-enterでENTERキーを押すとviが起動するので:qでぬける。

クライアント


> cd ~/.ssh
> touch config
> vi config
以下の内容をconfigファイルに記載{server_name},{user_name}は前記と同じにする。
host gitolite
       user gitolite
       hostname {server_name}
       port 22
       identityfile ~/.ssh/{user_name}


gitolite-adminの設定用のディレクトリを保存するディレクトリ(任意)に移動します。


> cd ~/{WORK_DIR}
> git clone gitolite:gitolite-admin


これで何事も無くダウンロードできたらほぼ問題ないと思います。
ちなみに、私はここで以下のエラーでかなり手こずりましたが、この手順でやれば出ませんでした。
fatal:gitolite-admin.git does not appear to be a git repository


git clone gitolite@{server_name}:repositories/gitolite-adminとやると一見うまくいったように見えますが、pushができなくなるので無駄です。


上記エラーではまった場合のチェックポイント
・サーバー:/home/gitolite/.ssh/authorized_keysの中身を確認。
 ⇒command="/home/gitolite/bin/gl-auth-command {user_name} ではじまってるか?なかったら最初からやりなおしてみる。。他に変なのがまじってたら消す。
・サーバー:/home/gitolite/.gitolite/keydirに{user_name}.pubがはいってるか?


一応pushできるか確認


> cd gitolite-admin
> touch README
> git add .
> git commit -m "add README file"
> git push

以上で最初の設定は完了です。

2011年4月17日日曜日

Git基本操作

基本コマンド

git init

git add

git add .

git add -u リポジトリに登録されているファイルで変更されたものをインデックスに追加

git add -A ツリーの変更(削除、追加)

git add i 対話的にインデックスに追加

git diff --cached

git commit

git commit --amend 直前のコミットを削除してコミット

git diff

git show

git push

git pull

公開用リポジトリの作成


sudo mkdir /var/repo
cd /var/repo
git clone --bare repository_path ./name.git
git-daemon --export-all --enable=receive-pack --base-path=/var/repo
cd /var/repo
mkdir repository_name
cd repository_name
git --bare init
[1844] fatal: The remote end hung up unexpectedly
が出たらフォルダのパーミッションの問題
chmod 777 repository_name
git remote add test2 git://remote_repository_address/test2.git
git push git://remote_repository_address/test2.git

2011年3月31日木曜日

Git

オープンソースのバージョン管理システムでよく見るようになったGitをようやくちゃんと勉強してみました。

これまでは会社独自開発の集中型のバージョン管理システムを使ってきていまして、
このGit(ぎっと)は分散型で最初ちょっと理解に苦しみました。
というのも、「インデックス」というものが集中型にはないので、なんぞこれと
悩んだわけなんですが、じっくり本を読んだらようやく理解できました。

簡単に言うとコミットする前の仮のローカルコミットみたいなものだなというのが
自分の理解なので、これが他の人に通じるのかはなぞです・・

Gitは分散型のメリットもありますが、共有の仕組みも結構簡単に構築できてしまいそうなので、さっそく構築してみようと思います。

この本については、なんらかのバージョン管理システムを使ったことがある人であれば、わりとさっくりと読めて、第二章の基本概念のところをしっかり理解しておけば、あとは斜め読みして、使いながら覚えていけばよいかなと思われます。