言語ネゴシエーション/github を使った公開 のバックアップの現在との差分(No.1)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
SIZE(22){COLOR(RED){このページの内容は非常に古いです(Rails 1.x.x)。最新の Rails では洗練された国際化の機構が標準で入っているため、下記は読むだけ無駄な内容になっています。}}

[[ソフトウェア/rails/言語ネゴシエーション]]

#contents

* git リポジトリ(ローカル)の作成 [#a85568da]

時代は subversion ではなく git なのだそうで。

http://www.kaeruspoon.net/articles/477 とか、~
http://www.kaeruspoon.net/articles/479 とか、~
http://www.netfort.gr.jp/~dancer/diary/200812.html.ja とか、~
http://blog.champierre.com/archives/670 ~
http://www.tempus.org/n-miyo/git-course-trans-ja/svn.ja.html~
あたりを参考に。

まずは git のインストール。

 LANG:console
 $ sudo aptitude install git-core
  以下の新規パッケージがインストールされます:
    git-core liberror-perl{a} rsync{a} 
  先に進みますか? [Y/n/?] Y
  liberror-perl (0.17-1) を設定しています ...
  git-core (1:1.6.3.1-1) を設定しています ...
  rsync (3.0.5-1) を設定しています ...
 $ git --version
  git version 1.6.3.1
 $ git config --global user.name "Osamu TAKEUCHI"
 $ git config --global user.email "osamu@big.jp"
 $ git config --global color.diff auto
 $ git config --global color.status auto
 $ git config --global color.branch auto
 $ git config --global color.interactive auto
 $ git config --global color.ui auto
 $ git config --global core.pager "lv -c"
 $ cat ~/.gitconfig 
  [user]
          name = Osamu TAKEUCHI
          email = osamu@big.jp
  [color]
          diff = auto
          status = auto
          branch = auto
          interactive = auto
          ui = auto
  [core]
          pager = lv -c

vendor/plugins/language_negotiation 以下にあるプラグインと、~
テスト用の Rails アプリケーションと、~
2つのリポジトリを別々に作成する。

まずはプラグインの方から

 LANG:console
 $ cd vendor/plugins/lanugage_negotiation/
 $ git init
  Initialized empty Git repository in (rails)/negotiation/vendor/plugins/lanugage_negotiation/.git/
 $ git add .
 $ git commit
    First commit of LanguageNegotiation plugin for Ruby on Rails
    
    Almost working with:
      Ruby version            1.8.7 (i486-linux)
      RubyGems version        1.3.2
      Rails version           2.2.2
      apache2                 2.2.11-3
     
    Documentation should be completed.
  
  [master (root-commit) 3df21b6] First commit of LanguageNegotiation plugin for Ruby on Rails
   10 files changed, 636 insertions(+), 0 deletions(-)
   create mode 100644 MIT-LICENSE
   create mode 100644 README
   create mode 100644 Rakefile
   create mode 100644 init.rb
   create mode 100644 install.rb
   create mode 100644 lib/lanugage_negotiation.rb
   create mode 100644 tasks/lanugage_negotiation_tasks.rake
   create mode 100644 test/lanugage_negotiation_test.rb
   create mode 100644 test/test_helper.rb
   create mode 100644 uninstall.rb
 $ git status
  # On branch master
  nothing to commit (working directory clean)

次にテストアプリケーション

 LANG:console
 $ cd ../../..
 $ pwd
  (rails)/negotiation
 $ git init
  Initialized empty Git repository in (rails)/negotiation/.git/
 $ mkdir db/migration
 $ find . -type d -empty|xargs -L1 -I{} touch {}/.gitignore # 空のディレクトリに .gitignore を作成
 $ touch log/.gitignore tmp/.gitignore vendor/plugin/.gitignore
 $ cp config/database.yml config/database.sample.yml
 $ cat > .gitignore
  .DS_Store
  *~
  /log/*.log
  /db/*.sqlite3
  /config/database.yml
  /tmp/*
  !/tmp/*.gitignore
  !/tmp/cache
  !/tmp/pids
  !/tmp/sessions
  !/tmp/sockets
  /public/cahce_in_test_environment                                                          
  /vendor/plugins/language_negotiation
 $ git add .
 $ git status
  # On branch master
  #
  # Initial commit
  #
  # Changes to be committed:
  #   (use "git rm --cached <file>..." to unstage)
  #
  #       new file:   .gitignore
  #       new file:   README
  #       new file:   Rakefile
  #       new file:   app/controllers/application.rb
  #       new file:   app/controllers/test_controller.rb
  #       new file:   app/helpers/application_helper.rb
  #       new file:   app/helpers/test_helper.rb
  #       new file:   app/models/.gitignore
  #       new file:   app/views/layouts/application.html.en.erb
  #       new file:   app/views/layouts/application.html.ja.erb
  #       new file:   app/views/layouts/application.text.en.erb
  #       new file:   app/views/test/_ok.html.en.erb
  #       new file:   app/views/test/_ok.html.ja.erb
  #       new file:   app/views/test/acceptid.html.ja.erb
  #       new file:   app/views/test/acceptid.text.ja.erb
  #       new file:   app/views/test/actioncached.html.en.erb
  #       new file:   app/views/test/actioncached.html.ja.erb
  #       new file:   app/views/test/fragmentcached.html.en.erb
  #       new file:   app/views/test/fragmentcached.html.ja.erb
  #       new file:   app/views/test/index.html.en.erb
  #       new file:   app/views/test/index.html.ja.erb
  #       new file:   app/views/test/onlyja.html.ja.erb
  #       new file:   app/views/test/pagecached.html.en.erb
  #       new file:   app/views/test/pagecached.html.ja.erb
  #       new file:   app/views/test/renderfile_.html.en.erb
  #       new file:   app/views/test/renderfile_.html.ja.erb
  #       new file:   config/boot.rb
  #       new file:   config/database.sample.yml
  #       new file:   config/environment.rb
  #       new file:   config/environments/development.rb
  #       new file:   config/environments/production.rb
  #       new file:   config/environments/test.rb
  #       new file:   config/initializers/inflections.rb
  #       new file:   config/initializers/mime_types.rb
  #       new file:   config/initializers/new_rails_defaults.rb
  #       new file:   config/locales/en.yml
  #       new file:   config/routes.rb
  #       new file:   db/migration/.gitignore
  #       new file:   db/schema.rb
  #       new file:   doc/README_FOR_APP
  #       new file:   doc/api
  #       new file:   lib/tasks/.gitignore
  #       new file:   log/.gitignore  ...
  #       new file:   public/.htaccess
  #       new file:   public/404.html
  #       new file:   public/422.html
  #       new file:   public/500.html
  #       new file:   public/dispatch.cgi
  #       new file:   public/dispatch.fcgi
  #       new file:   public/dispatch.rb
  #       new file:   public/favicon.ico
  #       new file:   public/images/rails.png
  #       new file:   public/index.html
  #       new file:   public/javascripts/application.js
  #       new file:   public/javascripts/controls.js
  #       new file:   public/javascripts/dragdrop.js
  #       new file:   public/javascripts/effects.js
  #       new file:   public/javascripts/prototype.js
  #       new file:   public/robots.txt
  #       new file:   public/stylesheets/.gitignore
  #       new file:   script/about
  #       new file:   script/console
  #       new file:   script/dbconsole
  #       new file:   script/destroy
  #       new file:   script/generate
  #       new file:   script/performance/benchmarker
  #       new file:   script/performance/profiler
  #       new file:   script/performance/request
  #       new file:   script/plugin
  #       new file:   script/process/inspector
  #       new file:   script/process/reaper
  #       new file:   script/process/spawner
  #       new file:   script/runner
  #       new file:   script/server
  #       new file:   test/fixtures/.gitignore
  #       new file:   test/functional/test_controller_test.rb
  #       new file:   test/performance/browsing_test.rb
  #       new file:   test/test_helper.rb
  #       new file:   test/unit/.gitignore
  #       new file:   tmp/.gitignore
  #       new file:   tmp/cache/.gitignore
  #       new file:   tmp/pids/.gitignore
  #       new file:   tmp/sessions/.gitignore
  #       new file:   tmp/sockets/.gitignore
  #       new file:   vendor/actionmailer
  #       new file:   vendor/actionpack
  #       new file:   vendor/activemodel
  #       new file:   vendor/activerecord
  #       new file:   vendor/activeresource
  #       new file:   vendor/activesupport
  #       new file:   vendor/plugins/.gitignore
  #       new file:   vendor/rails
  #       new file:   vendor/railties
  #
 $ git commit
    Testing framework of LanguageNegotiation plugin for Ruby on Rails
    
    Works with:
      Ruby version            1.8.7 (i486-linux)
      RubyGems version        1.3.2
      Rails version           2.2.2
      apache2                 2.2.11-3
  ...
 $

git は空のディレクトリを無視するので、空のディレクトリ全てに 
.gitignore というファイルを作っておく。

個々のディレクトリの .gitignore にルールを書くことを勧める記述が
多いのだけれど、見通しが悪くなるのでルートディレクトリの .gitignore に
一元化するのがよいと思う。

ルールを / から始めるとリポジトリのルートディレクトリからの絶対パスとして、~
ルールを / から始めなければ個々のディレクトリからの相対パスとして、解釈されるらしい。

tmp ディレクトリの指定が結構面倒で、~
 /tmp/*

とすると、.gitignore も含めて無視されるため、空のディレクトリとなった /tmp 自身も無視されてしまう。
 !.giignore

とすることで、.gitignore は無視しないように指定できる。

同様に、/tmp/cache/.gitignore なども無視しないように書いたのが以下のルール。
  !/tmp/*.gitignore
  !/tmp/cache
  !/tmp/pids
  !/tmp/sessions
  !/tmp/sockets

これでローカルに2つのリポジトリが作成できた。

* プロジェクトを github に登録 [#s00cb9d3]

https://github.com/

にアカウントを作成し、プロジェクト RailsLanguageNegotiationPlugin と
RailsLanguageNegotiationPluginTestApp を作成。

表示されたガイダンスに沿う形で、

 LANG:console
 $ git config --global github.user osamutake
 $ git config --global github.token c2b35c1bd09d64bf37a713702d7ae659
 $ git remote add origin git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
 $ git push origin master
  Permission denied (publickey).
  fatal: The remote end hung up unexpectedly
 $ cd ~/.ssh
 $ ls id_dsa
  ls: cannot access id_dsa: そのようなファイルやディレクトリはありません
 $ ssh-keygen # もし id_dsa がすでにあればスキップ
  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/takeuchi/.ssh/id_rsa): (何もせずENTER)
  Enter passphrase (empty for no passphrase): (何もせずENTER)
  Enter same passphrase again: (何もせずENTER)
  Your identification has been saved in github.
  Your public key has been saved in github.pub.
  The key fingerprint is:
  ab:5e:07:df:a1:02:84:cf:a3:21:d1:7e:aa:38:b3:2f takeuchi@dora
  The key's randomart image is:
  +--[ RSA 2048]----+
  | ................|
  |                 |
  +-----------------+
 $ cat id_isa.pub 
  ssh-rsa AAAB3Nza...
 $ # 表示された内容をコピーして https://github.com/account#keys の SSH Public Keys に追加
 $ cd (rails)/negotiation/vendor/plugins/language_negotiation
 $ git push origin master
  Counting objects: 15, done.
  Compressing objects: 100% (13/13), done.
  Writing objects: 100% (15/15), 6.86 KiB, done.
  Total 15 (delta 0), reused 0 (delta 0)
  To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
   * [new branch]      master -> master

https://github.com/ を見るとちゃんと登録されている。とても簡単。

** 取り出せる事をテスト [#a95bef8f]

じゃ、取り出せるか試してみるか、と軽い気持ちで操作したら、えらい事になった。

 LANGUAGE:console
 $ cd ..
 $ mkdir language_negotiation2
 $ cd language_negotiation2
 $ git pull git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
  From git@github.com:osamutake/RailsLanguageNegotiationPlugin
   * branch            HEAD       -> FETCH_HEAD
  Auto-merging README
  CONFLICT (add/add): Merge conflict in README
  Auto-merging Rakefile
  CONFLICT (add/add): Merge conflict in Rakefile
  Auto-merging test/test_helper.rb
  CONFLICT (add/add): Merge conflict in test/test_helper.rb
  Automatic merge failed; fix conflicts and then commit the result.

空のディレクトリでどうして conflict?~
と思ったら、テストアプリケーションのリポジトリにマージされてました。

 LANGUAGE:console
 $ cd ../../..
 $ git status
  README: needs merge
  Rakefile: needs merge
  test/test_helper.rb: needs merge
  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  #       new file:   MIT-LICENSE
  #       new file:   init.rb
  #       new file:   install.rb
  #       new file:   lib/lanugage_negotiation.rb
  #       new file:   tasks/lanugage_negotiation_tasks.rake
  #       new file:   test/lanugage_negotiation_test.rb
  #       new file:   uninstall.rb
  #
  # Changed but not updated:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       unmerged:   README
  #       unmerged:   Rakefile
  #       unmerged:   test/test_helper.rb
  #

pull したのを取り消し、マージされたファイルを書き戻す。

 LANGUAGE:console
 $ git reset HEAD
  README: locally modified
  Rakefile: locally modified
  test/test_helper.rb: locally modified
 $ git status
  # On branch master
  # Changed but not updated:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       modified:   README
  #       modified:   Rakefile
  #       modified:   test/test_helper.rb
  #
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  #       MIT-LICENSE
  #       init.rb
  #       install.rb
  #       lib/lanugage_negotiation.rb
  #       tasks/
  #       test/lanugage_negotiation_test.rb
  #       uninstall.rb
  no changes added to commit (use "git add" and/or "git commit -a")
 $ rm MIT-LICENSE init.rb install.rb lib/lanugage_negotiation.rb 
 $ rm test/lanugage_negotiation_test.rb uninstall.rb
 $ rm -r tasks
 $ git status
  # On branch master
  # Changed but not updated:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       modified:   README
  #       modified:   Rakefile
  #       modified:   test/test_helper.rb
  #
  no changes added to commit (use "git add" and/or "git commit -a")
 $ git checkout README Rakefile test/test_helper.rb
 $ git status
  # On branch master
  nothing to commit (working directory clean)

ふう。~
git は親ディレクトリをさかのぼってリポジトリデータを検索する仕様なのね。

negotiation アプリケーションの外に出て、

 LANGUAGE:console
 $ cd
 $ mkdir language_negotiation
 $ cd language_negotiation
 $ git pull git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
  fatal: Not a git repository (or any of the parent directories): .git

あら、そもそも pull と書いていたのが間違い、と。

 LANG:console
 $ git clone git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
  Initialized empty Git repository in /home/takeuchi/language_negotiation/RailsLanguageNegotiationPlugin/.git/
  remote: Counting objects: 15, done.
  remote: Compressing objects: 100% (13/13), done.
  remote: Total 15 (delta 0), reused 0 (delta 0)
  Receiving objects: 100% (15/15), 6.86 KiB, done.
 $ ls
  RailsLanguageNegotiationPlugin
 $ cd RailsLanguageNegotiationPlugin/
 $ ls
  MIT-LICENSE  README  Rakefile  init.rb  install.rb  lib  tasks  test  uninstall.rb
 $ git status
  # On branch master
  nothing to commit (working directory clean)
 $ cd ../..
 $ rm -rf language_negotiation/

正しく落とせている。

もしかして・・・

 LANG:console
 $ cd (rails)/negotiation
 $ cd vendor/plugins/
 $ git clone git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
  Initialized empty Git repository in (rails)/negotiation/vendor/plugins/RailsLanguageNegotiationPlugin/.git/
  remote: Counting objects: 15, done.
  remote: Compressing objects: 100% (13/13), done.
  remote: Total 15 (delta 0), reused 0 (delta 0)
  Receiving objects: 100% (15/15), 6.86 KiB, done.
 $ ls
  RailsLanguageNegotiationPlugin  lanugage_negotiation
 $ ls RailsLanguageNegotiationPlugin
  MIT-LICENSE  README  Rakefile  init.rb  install.rb  lib  tasks  test  uninstall.rb
 $ git status
  # On branch master
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  #       RailsLanguageNegotiationPlugin/
  nothing added to commit but untracked files present (use "git add" to track)
 $ rm -rf RailsLanguageNegotiationPlugin

これでもうまく行くわけね。

やはりもう少し git に慣れないと危険だ。

- Gitを使いこなすための20のコマンド http://sourceforge.jp/magazine/09/03/16/0831212/2
- Lern.github http://learn.github.com/

で、いきなり公開されてしまうのだから、もう少しドキュメントをしっかりしないとだめだと今更反省。~
テストアプリケーションの方は特に、なので、しばらくローカルで更新して、整ったら push するのが良さそう。

ローカルでも履歴が取れるのが subversion よりも良いところみたい。

* git を使った編集作業 [#w301c061]

http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1

にも書いたけれど、言語の優先順位について考える必要がありそう。

これを例にして、git を使った編集作業について書く。

 LANG:console
 $ jed vendor/plugins/language_negotiation/lib/language_negotiation.rb
  (編集)
 $ jed vendor/plugins/language_negotiation/test/language_negotiation_test.rb
  (編集)
 $ cd ../../..
 $ rake test:plugins
  Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader
  Started
  ...
  Finished in 0.037807 seconds.
  
  3 tests, 30 assertions, 0 failures, 0 errors
 $ rake test:functionals
  Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader
  Started
  ..........................
  Finished in 0.31159 seconds.
  
  30 tests, 112 assertions, 0 failures, 0 errors

テストが無事通ったらコミット作業。

 LANG:console
 $ cd vendor/plugins/language_negotiation
 $ git status
  # On branch master
  # Changed but not updated:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       modified:   lib/lanugage_negotiation.rb
  #       modified:   test/lanugage_negotiation_test.rb
  #
  no changes added to commit (use "git add" and/or "git commit -a")
 $ git diff
  (差分がカラー表示される)
 $ git add lib/lanugage_negotiation.rb test/lanugage_negotiation_test.rb 
 $ git status
  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  #       modified:   lib/lanugage_negotiation.rb
  #       modified:   test/lanugage_negotiation_test.rb
  #
 $ git commit
  Adjust priority of template file without language specification
  
  When template files 'some.html.en' and 'some.html' exist,
  request for 'some.ja' should be processed with 'some.html'
  instead of 'some.html.en'.
  
  See 
  http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1
  
  Other improvements:
  
   - removed not being used
       ActionController::AbstractRequest::language
  
   - calls for
       ActionController::AbstractRequest.accepts_languages.first
     were replaced by those for
       ActionController::AbstractRequest.language_priority.first
  
   - optimized template_handler_extension extraction from template_path
     in ActionView::Base::_pick_template
   
   - removed not being used
       ActionController::Caching::Actions::ActionCachePath::language
 
  [master e3a80c3] Adjust priority of template file without language specification
   2 files changed, 45 insertions(+), 44 deletions(-)
 $ git push
  Counting objects: 11, done.
  Compressing objects: 100% (6/6), done.
  Writing objects: 100% (6/6), 1.37 KiB, done.
  Total 6 (delta 3), reused 0 (delta 0)
  To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
     3df21b6..e3a80c3  master -> master

以上でリモートリポジトリも更新される。

テストアプリケーションのコミットではちょっとミスした。

 LANG:console
 $ cd ../../..
 $ git status
  # On branch master
  # Changed but not updated:
  #   (use "git add <file>..." to update what will be committed)
  #   (use "git checkout -- <file>..." to discard changes in working directory)
  #
  #       modified:   app/controllers/test_controller.rb
  #       modified:   test/functional/test_controller_test.rb
  #
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  #       app/views/test/nolang.html.erb
  #       app/views/test/nolang.html.ja.erb
 $ git commit -a
  Adjust priority of template file without language specification
  
  When template files 'some.html.en' and 'some.html' exist,
  request for 'some.ja' should be processed with 'some.html'
  instead of 'some.html.en'.
  
  See 
  http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1
  
  [master 26c50dc] Adjust priority of template file without language specification
   2 files changed, 49 insertions(+), 0 deletions(-)
 $ git status
  # On branch master
  # Untracked files:
  #   (use "git add <file>..." to include in what will be committed)
  #
  #       app/views/test/nolang.html.erb
  #       app/views/test/nolang.html.ja.erb
  nothing added to commit but untracked files present (use "git add" to track)
 $ git add app/views/test/nolang.html.*
 $ git status
  # On branch master
  # Changes to be committed:
  #   (use "git reset HEAD <file>..." to unstage)
  #
  #       new file:   app/views/test/nolang.html.erb
  #       new file:   app/views/test/nolang.html.ja.erb
  #
 $ git commit --amend
  [master 678da96] Adjust priority of template file without language specification
   4 files changed, 51 insertions(+), 0 deletions(-)
   create mode 100644 app/views/test/nolang.html.erb
   create mode 100644 app/views/test/nolang.html.ja.erb
 $ git log
  commit 678da9633211e515a7ec56034bb7b46e6724bd3e
  Author: Osamu TAKEUCHI <osamu@big.jp>
  Date:   Wed Jun 10 17:45:01 2009 +0900
  
      Adjust priority of template file without language specification
      
      When template files 'some.html.en' and 'some.html' exist,
      request for 'some.ja' should be processed with 'some.html'
      instead of 'some.html.en'.
      
      See
      http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1
  
  commit ad51715241e8f480da6de8d1d87035fea6c0d2ba
  Author: Osamu TAKEUCHI <osamu@big.jp>
  Date:   Wed Jun 10 10:34:05 2009 +0900
  
      Testing framework of LanguageNegotiation plugin for Ruby on Rails
      
      Works with:
          Ruby version            1.8.7 (i486-linux)
          RubyGems version        1.3.2
          Rails version           2.2.2
          apache2                 2.2.11-3

git commit -a で変更点はすべてコミットされるかと思いきや、
新規作成ファイルについては対象外だったようだ。

手動で git add した後、git commit --amend したところ、
コミットのやり直しができて、ミスの形跡も残らなかった。

最後に github の該当する issue にコミット番号をコメントして、
Closed に移して一件落着。

* CHANGELOG について [#e36e8a78]

ファイル中に変更履歴を残したい。

こんな手順で良いんだろうか?

 LANG:console
 $ git log > CHANGELOG
 $ git add CHANGELOG
 $ git commit --amend
 $ cd vendor/plugins/language_negotiation
 $ git log > CHANGELOG
 $ git add CHANGELOG
 $ git commit --amend
 $ git push origin master
  To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git
   ! [rejected]        master -> master (non-fast forward)
  error: failed to push some refs to 'git@github.com:osamutake/RailsLanguageNegotiationPlugin.git'
 $ git push origin +master:master

最後の部分、--amend でコミットしたせいでリモートの情報とローカルの情報が
食い違ってしまっていて、そのままだと push させてくれない。

ローカルを優先して強制的に push するための呪文が git push origin +master:master らしい。

同様の現象は、ローカルでの作業中にリモートリポジトリが書き換わった
場合にも起きる。

その場合には素直に git pull origin master して、ローカル側を更新する事になる。

* tar ball の作り方 [#l75803c1]

git ではなく tar ball で落としたい人向けに、
ファイルパスに "*.git*" を含まないファイルのみを
日付付きのファイル名に tar.gz してアップしておくと
いいのかな、などと、

 LANG:console
 $ find . -not -path '*/.git*' -a -type f | \
   tar fcz `date +"language_negotiation-%y%m%d%H%M%S"` -T-

これを Downloads ページにアップロードすれば・・・

む、よく見たら Dowloads ページに行かなくてもページの真ん中に
download ボタンがあって、これをクリックすればソースツリーを
zip か tar で落とせる仕組みになっているんだね。

自分で tar ball を作る必要は無かったようでした。

* スペルミスの修正 [#wd5c4d69]

!!!

今まで気づかなかったというのが信じられないほどに lanugage_negotiation 。

 LANG:console
 $ cd ..
 $ mv lanugage_negotiation language_negotiation
 $ cd language_negotiation
 $ grep -i lanugage * */*
  README:LanugageNegotiation
  Rakefile:desc 'Test the lanugage_negotiation plugin.'
  Rakefile:desc 'Generate documentation for the lanugage_negotiation plugin.'
  Rakefile:  rdoc.title    = 'LanugageNegotiation'
  init.rb:require "lanugage_negotiation"
  lib/lanugage_negotiation.rb:# LanugageNegotiation
  tasks/lanugage_negotiation_tasks.rake:# task :lanugage_negotiation do
  test/lanugage_negotiation_test.rb:class LanugageNegotiationTest < ActiveSupport::TestCase
 $ jed
  (編集)
 $ grep -i lanugage * */*
 $ find . -iname lanu*
  ./test/lanugage_negotiation_test.rb
  ./tasks/lanugage_negotiation_tasks.rake
  ./lib/lanugage_negotiation.rb
 $ cd test
 $ git mv lanugage_negotiation_test.rb language_negotiation_test.rb
 $ ls
  language_negotiation_test.rb  test_helper.rb
 $ cd ../tasks/
 $ git mv lanugage_negotiation_tasks.rake language_negotiation_tasks.rake 
 $ cd ../lib
 $ git mv lanugage_negotiation.rb language_negotiation.rb 
 $ cd ..
 $ find . -iname lanu*
 $ git status
  #       renamed:    lib/lanugage_negotiation.rb -> lib/language_negotiation.rb
  #       renamed:    tasks/lanugage_negotiation_tasks.rake -> tasks/language_negotiation_tasks.rake
  #       renamed:    test/lanugage_negotiation_test.rb -> test/language_negotiation_test.rb
  #       modified:   README
  #       modified:   Rakefile
  #       modified:   init.rb
  #       modified:   lib/language_negotiation.rb
  #       modified:   tasks/language_negotiation_tasks.rake
  #       modified:   test/language_negotiation_test.rb
 $ cd ../../..
 $ rake test:plugins
  3 tests, 30 assertions, 0 failures, 0 errors
 $ rake test:functionals
  30 tests, 112 assertions, 0 failures, 0 errors
 $ cd vendor/plugins/language_negotiation/
 $ git commit -a -m "Typo fixing lanugage -> language"
  [master aef2a17] Typo fixing lanugage -> language
   6 files changed, 9 insertions(+), 9 deletions(-)
   rename lib/{lanugage_negotiation.rb => language_negotiation.rb} (99%)
   rename tasks/{lanugage_negotiation_tasks.rake => language_negotiation_tasks.rake} (67%)
   rename test/{lanugage_negotiation_test.rb => language_negotiation_test.rb} (98%)
 $ git status
  nothing to commit (working directory clean)
 $ git log > CHANGELOG
 $ git commit -a --amend
  [master 79ce1e9] Typo fixing lanugage -> language
   7 files changed, 16 insertions(+), 10 deletions(-)
   rename lib/{lanugage_negotiation.rb => language_negotiation.rb} (99%)
   rename tasks/{lanugage_negotiation_tasks.rake => language_negotiation_tasks.rake} (67%)
   rename test/{lanugage_negotiation_test.rb => language_negotiation_test.rb} (98%)
 $ git push origin master

アプリケーション側のコードに全く触れずに済むあたり、Rails の設計の良さが光る。

プラグイン内にしても、ドキュメント部分を除けば
  init.rb:require "lanugage_negotiation"
  test/lanugage_negotiation_test.rb:class LanugageNegotiationTest < ActiveSupport::TestCase

この2つだけ。

しかも後者は必ずしも直す必要のない部分。

すばらしい。

PS 今まで気づかなかったのが恐ろしい。

* CHANGELOG 更新コマンド [#h3d7010e]

メッセージの入力を求められるのがおっくうなとき、git commit の 
-C オプションが使える。

 LANG:console
 $ test -d .git && \
   git log > CHANGELOG && \
   git commit -a --amend -C `head -1 CHANGELOG | sed "s/.* //"`

+ .git ディレクトリが存在すれば~
(リポジトリのトップディレクトリである事を確認してから)
+ git log を CHANGELOG に入れ
+ 前回と同じメッセージを付けて commit する



Counter: 6000 (from 2010/06/03), today: 1, yesterday: 0