・設定
エディタを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年7月1日日曜日
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というのがいいかも
最初に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
ここでエラーがでました
・対処方法
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
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
bundle exec rake db:create && \
bundle exec rake db:migrate && \
bundle exec rake ultrasphinx:bootstrap
・対処方法
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
以上で最初の設定は完了です。
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
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は分散型のメリットもありますが、共有の仕組みも結構簡単に構築できてしまいそうなので、さっそく構築してみようと思います。
この本については、なんらかのバージョン管理システムを使ったことがある人であれば、わりとさっくりと読めて、第二章の基本概念のところをしっかり理解しておけば、あとは斜め読みして、使いながら覚えていけばよいかなと思われます。
これまでは会社独自開発の集中型のバージョン管理システムを使ってきていまして、
このGit(ぎっと)は分散型で最初ちょっと理解に苦しみました。
というのも、「インデックス」というものが集中型にはないので、なんぞこれと
悩んだわけなんですが、じっくり本を読んだらようやく理解できました。
簡単に言うとコミットする前の仮のローカルコミットみたいなものだなというのが
自分の理解なので、これが他の人に通じるのかはなぞです・・
Gitは分散型のメリットもありますが、共有の仕組みも結構簡単に構築できてしまいそうなので、さっそく構築してみようと思います。
この本については、なんらかのバージョン管理システムを使ったことがある人であれば、わりとさっくりと読めて、第二章の基本概念のところをしっかり理解しておけば、あとは斜め読みして、使いながら覚えていけばよいかなと思われます。
登録:
投稿 (Atom)