CentOS5.9にGitサーバーを立てる。
意気揚々とgitサーバを立てる事にする・・がパッケージがない。
# yum install git-daemon Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * extras: mirrors.hust.edu.cn * updates: ftp.tsukuba.wide.ad.jp Setting up Install Process No package git-daemon available. Nothing to do
レポジトリを追加します。
# vim /etc/yum.repos.d/epel.repo
[epel] name=Extra Packages for Enterprise Linux 5 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL [epel-debuginfo] name=Extra Packages for Enterprise Linux 5 - $basearch - Debug #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL gpgcheck=1 [epel-source] name=Extra Packages for Enterprise Linux 5 - $basearch - Source #baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL gpgcheck=1
これでどうだ。
# yum install git-daemon
無事パッケージが見つかった。
# yum install git-daemon Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * epel: ftp.kddilabs.jp * extras: mirrors.hust.edu.cn * updates: ftp.tsukuba.wide.ad.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package git-daemon.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: git = 1.8.2.1-1.el5 for package: git-daemon --> Processing Dependency: xinetd for package: git-daemon --> Running transaction check --> Processing Dependency: git = 1.7.10.2-1.w5 for package: emacs-git --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-svn --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-gui --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-email --> Processing Dependency: git = 1.7.10.2-1.w5 for package: perl-Git --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-cvs --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-all --> Processing Dependency: git = 1.7.10.2-1.w5 for package: gitk ---> Package git.i386 0:1.8.2.1-1.el5 set to be updated ---> Package xinetd.i386 2:2.3.14-20.el5_10 set to be updated --> Running transaction check ---> Package emacs-git.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-all.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: git-p4 = 1.8.2.1-1.el5 for package: git-all ---> Package git-cvs.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: perl-DBD-SQLite for package: git-cvs ---> Package git-email.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-gui.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-svn.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: perl(Git::SVN::Utils) for package: git-svn --> Processing Dependency: perl(Git::SVN::Ra) for package: git-svn --> Processing Dependency: perl(Git::SVN::Prompt) for package: git-svn --> Processing Dependency: perl(Git::SVN::Migration) for package: git-svn [root@localhost www]# yum install git-daemon Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * epel: ftp.kddilabs.jp * extras: mirrors.hust.edu.cn * updates: ftp.tsukuba.wide.ad.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package git-daemon.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: git = 1.8.2.1-1.el5 for package: git-daemon --> Processing Dependency: xinetd for package: git-daemon --> Running transaction check --> Processing Dependency: git = 1.7.10.2-1.w5 for package: emacs-git --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-svn --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-gui --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-email --> Processing Dependency: git = 1.7.10.2-1.w5 for package: perl-Git --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-cvs --> Processing Dependency: git = 1.7.10.2-1.w5 for package: git-all --> Processing Dependency: git = 1.7.10.2-1.w5 for package: gitk ---> Package git.i386 0:1.8.2.1-1.el5 set to be updated ---> Package xinetd.i386 2:2.3.14-20.el5_10 set to be updated --> Running transaction check ---> Package emacs-git.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-all.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: git-p4 = 1.8.2.1-1.el5 for package: git-all ---> Package git-cvs.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: perl-DBD-SQLite for package: git-cvs ---> Package git-email.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-gui.i386 0:1.8.2.1-1.el5 set to be updated ---> Package git-svn.i386 0:1.8.2.1-1.el5 set to be updated --> Processing Dependency: perl(Git::SVN::Utils) for package: git-svn --> Processing Dependency: perl(Git::SVN::Ra) for package: git-svn --> Processing Dependency: perl(Git::SVN::Prompt) for package: git-svn --> Processing Dependency: perl(Git::SVN::Migration) for package: git-svn --> Processing Dependency: perl(Git::SVN::Log) for package: git-svn --> Processing Dependency: perl(Git::SVN::Fetcher) for package: git-svn --> Processing Dependency: perl(Git::SVN::Editor) for package: git-svn --> Processing Dependency: perl(Git::SVN) for package: git-svn ---> Package gitk.i386 0:1.8.2.1-1.el5 set to be updated ---> Package perl-Git.i386 0:1.8.2.1-1.el5 set to be updated --> Running transaction check ---> Package git-p4.i386 0:1.8.2.1-1.el5 set to be updated ---> Package perl-DBD-SQLite.i386 0:1.14-3.el5 set to be updated ---> Package perl-Git-SVN.i386 0:1.8.2.1-1.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ===================================================================================================================================================================================================== Package Arch Version Repository Size ===================================================================================================================================================================================================== Installing: git-daemon i386 1.8.2.1-1.el5 epel 336 k Installing for dependencies: git-p4 i386 1.8.2.1-1.el5 epel 77 k perl-DBD-SQLite i386 1.14-3.el5 epel 287 k perl-Git-SVN i386 1.8.2.1-1.el5 epel 84 k xinetd i386 2:2.3.14-20.el5_10 updates 127 k Updating for dependencies: emacs-git i386 1.8.2.1-1.el5 epel 50 k git i386 1.8.2.1-1.el5 epel 7.3 M git-all i386 1.8.2.1-1.el5 epel 22 k git-cvs i386 1.8.2.1-1.el5 epel 116 k git-email i386 1.8.2.1-1.el5 epel 54 k git-gui i386 1.8.2.1-1.el5 epel 282 k git-svn i386 1.8.2.1-1.el5 epel 387 k gitk i386 1.8.2.1-1.el5 epel 156 k perl-Git i386 1.8.2.1-1.el5 epel 49 k Transaction Summary ===================================================================================================================================================================================================== Install 5 Package(s) Upgrade 9 Package(s) Total download size: 9.3 M Is this ok [y/N]:
もちろんyesですとも。
Downloading Packages: (1/14): git-all-1.8.2.1-1.el5.i386.rpm | 22 kB 00:00 (2/14): perl-Git-1.8.2.1-1.el5.i386.rpm | 49 kB 00:00 (3/14): emacs-git-1.8.2.1-1.el5.i386.rpm | 50 kB 00:00 (4/14): git-email-1.8.2.1-1.el5.i386.rpm | 54 kB 00:00 (5/14): git-p4-1.8.2.1-1.el5.i386.rpm | 77 kB 00:00 (6/14): perl-Git-SVN-1.8.2.1-1.el5.i386.rpm | 84 kB 00:00 (7/14): git-cvs-1.8.2.1-1.el5.i386.rpm | 116 kB 00:00 (8/14): xinetd-2.3.14-20.el5_10.i386.rpm | 127 kB 00:00 (9/14): gitk-1.8.2.1-1.el5.i386.rpm | 156 kB 00:00 (10/14): git-gui-1.8.2.1-1.el5.i386.rpm | 282 kB 00:00 (11/14): perl-DBD-SQLite-1.14-3.el5.i386.rpm | 287 kB 00:00 (12/14): git-daemon-1.8.2.1-1.el5.i386.rpm | 336 kB 00:00 (13/14): git-svn-1.8.2.1-1.el5.i386.rpm | 387 kB 00:00 (14/14): git-1.8.2.1-1.el5.i386.rpm | 7.3 MB 00:00 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 3.7 MB/s | 9.3 MB 00:02 warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6 GPG key retrieval failed: [Errno 5] OSError: [Errno 2] No such file or directory: '/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL'
キーが存在しなかったので入れる。
# cd /etc/pki/rpm-gpg/ # wget --no-check-certificate https://fedoraproject.org/static/217521F6.txt # cp 217521F6.txt RPM-GPG-KEY-EPEL # rm 217521F6.txt # yum install git-daemon
再度挑戦。
Downloading Packages: warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6 epel/gpgkey | 1.8 kB 00:00 Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL Is this ok [y/N]: y Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : perl-DBD-SQLite 1/23 Installing : xinetd 2/23 Updating : perl-Git 3/23 Updating : git 4/23 Installing : git-daemon 5/23 Updating : gitk 6/23 Updating : git-gui 7/23 Updating : emacs-git 8/23 Updating : git-email 9/23 Installing : git-p4 10/23 Updating : git-cvs 11/23 Installing : perl-Git-SVN 12/23 Updating : git-svn 13/23 Updating : git-all 14/23 Cleanup : emacs-git 15/23 Cleanup : git-email 16/23 Cleanup : git-cvs 17/23 Cleanup : perl-Git 18/23 Cleanup : git-svn 19/23 Cleanup : git 20/23 Cleanup : git-all 21/23 Cleanup : gitk 22/23 Cleanup : git-gui 23/23 Installed: git-daemon.i386 0:1.8.2.1-1.el5 Dependency Installed: git-p4.i386 0:1.8.2.1-1.el5 perl-DBD-SQLite.i386 0:1.14-3.el5 perl-Git-SVN.i386 0:1.8.2.1-1.el5 xinetd.i386 2:2.3.14-20.el5_10 Dependency Updated: emacs-git.i386 0:1.8.2.1-1.el5 git.i386 0:1.8.2.1-1.el5 git-all.i386 0:1.8.2.1-1.el5 git-cvs.i386 0:1.8.2.1-1.el5 git-email.i386 0:1.8.2.1-1.el5 git-gui.i386 0:1.8.2.1-1.el5 git-svn.i386 0:1.8.2.1-1.el5 gitk.i386 0:1.8.2.1-1.el5 perl-Git.i386 0:1.8.2.1-1.el5 Complete!
# /etc/init.d/xinetd start Starting xinetd: [ OK ]
# cp /etc/xinetd.d/git /etc/xinetd.d/git-daemon
# vim /etc/xinetd.d/git-daemon
# default: off # description: The git dæmon allows git repositories to be exported using \ # the git:// protocol. service git { disable = no # <- 変更 socket_type = stream wait = no user = nobody server = /usr/libexec/git-core/git-daemon server_args = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose log_on_failure += USERID }
# /etc/rc.d/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ]
無事入ったのでリポジトリを作っていきます。
# cd /var/lib/git/ # mkdir public_git # mkdir public_git/test.git # cd public_git/test.git # git init --bare --shared=true Initialized empty shared Git repository in /var/lib/git/public_git/test.git/
コミットできるユーザーを作ります
# groupadd git # adduser git # passwd git # chown -R root:git /var/lib/git/
コミットできるユーザーでクローン
# su git $ cd $ mkdir test $ cd test $ git clone ssh://git@<LOCAL_DOMAIN>:22/var/lib/git/public_git/test.git Cloning into 'test'... The authenticity of host '<LOCAL_DOMAIN> (<LOCAL_DOMAIN>)' can't be established. RSA key fingerprint is df:54:05:12:a6:27:8c:f0:b4:ff:8e:1b:cd:8c:52:b9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '<LOCAL_DOMAIN>' (RSA) to the list of known hosts.
あとは編集していくだけ
$ git config --global user.email "xx@xxxx.xx" $ git config --global user.name "git" $ cd test $ vim test.txt $ git add test.txt $ git commit -m "commit!" $ git push
出来ました!
[おまけ]よくあるエラー
ファイルをコミットしてない時に出る
No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. fatal: The remote end hung up unexpectedly error: failed to push some refs to 'ssh://git@<LOCAL_DOMAIN>:22/var/lib/git/pupblic_git/test.git'
書き込み権限がないので、きちんとpushできるようにグループやユーザーに権限を与える事。
fatal: Unable to create '<PATH_TO_REPOS>/master.lock': Permission denied
私的にgitでよく使うコマンド
ローカル&リモートにブランチを作る
$ git checkout -b working origin $ vim test.txt $ git commit -am "commit" $ git push origin working
ローカルブランチを削除
$ git branch -d <branchname>
リモートブランチを削除
$ git push --delete <repository> <branchname>
ブランチをマージする
$ git fetch origin $ git merge origin/master somebranch
git branch -a で消したブランチが出る
$ git fetch --prune
solrでjava.net.UnknownHostExceptionと出た時の解決法
solrを使っていて、updateやcommitする際に
java.net.UnknownHostException local.test
上記みたいな自分で設定したローカルドメインでunknown hostが出た時。
$ vim /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.xxx.xxx local.test
という風にhostsに設定してやると認識されるようになる(要再起動)
名前解決できない時はhostsで直してやるのだ
GitHubで初めてのコミット
まず始めにリポジトリを作ります。
GitHubの画面の右下にある「New repository」をクリック
リポジトリの名前を入れます
次いでローカルリポジトリを作ります・・が
その前に初期設定をします
$ git config --global user.name '<user_name>' $ git config --global user.email '<user_email>' $ git config --global alias.co checkout $ git config --global alias.st status $ git config --global alias.ci commit
ローカルリポジトリ作ります。
まずは適当な箇所にディレクトリを作って移動します
$ mkdir /var/www/tutorial $ mv /var/www/tutorial
移動したらディレクトリを初期化します
これで.gitが作成され、管理下におかれました。
$ git init Initialized empty Git repository in .git/
なんでもいいのでファイルを作ります
$ vim sample.txt $ git st # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # sample.txt
インデックスに登録します
$ git add sample.txt $ git st # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: sample.txt #
コミットします
$ git commit -m "first commit" [master (root-commit) 6069b73] first commit 1 file changed, 1 insertion(+) create mode 100644 sample.txt
ここからリモートリポジトリにようやくコミットをしていきます
まずは名前を付けます。今後はoriginという名前にします
$ git remote add origin <リポジトリのURL>
pushします。ユーザー名とパスワードを求められるので登録したものを入れてください。
$ git push origin master
これでGitHub上にコミット完了です。
CentOSにgitを入れる
デフォルトでは入りません。レポジトリを追加します。
# rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm # yum install --enablerepo=webtatic git-all
【Ruby on Rails】ユニットテストをする
Ruby on Railsでテストをしたい。
テストはrakeで行うようです。
$ rake
Run options: --seed 9253 # Running tests: .............. Finished tests in 1.049915s, 13.3344 tests/s, 24.7639 assertions/s. 14 tests, 26 assertions, 0 failures, 0 errors, 0 skips
とテストが実行されます。
まだテストを書いていないので何も起きません。
userテーブルに対してテストを書いていきます。
# vim test/models/user_test.rb
userテーブルには2つだけレコードが入っていますが
わざと99個にしてみます。
require 'test_helper' class UserTest < ActiveSupport::TestCase # Replace this with your real tests. test "the truth" do assert true end # usersテーブルは99のデータが入っているか test "test_data_count" do user=User.all assert_equal 99 ,user.length end end
# rake
Run options: --seed 34206 # Running tests: .......F........ Finished tests in 0.346363s, 46.1944 tests/s, 80.8402 assertions/s. 1) Failure: UserTest#test_test_data_count [<PATH_TO_APP>/test/models/user_test.rb:12]: Expected: 99 Actual: 2 16 tests, 28 assertions, 1 failures, 0 errors, 0 skips
Failureが出ました。
正しく動くように書き換えます
※16testsと出てるのは他でテスト書いてるためです
require 'test_helper' class UserTest < ActiveSupport::TestCase # Replace this with your real tests. test "the truth" do assert true end # usersテーブルは2つのデータが入っているか test "test_data_count" do user=User.all assert_equal 2 ,user.length end end
# rake
Run options: --seed 59983 # Running tests: ................ Finished tests in 0.276852s, 57.7927 tests/s, 101.1372 assertions/s. 16 tests, 28 assertions, 0 failures, 0 errors, 0 skips
無事テストが通りました。
このようにしてテストを書いていきます。
【Ruby on Rails】カラムを追加する
やり方は2つ
1. migrationファイルを書く
2. コマンドを書いてmigrationファイルを自動生成
1. migrationファイルを書く場合
を作ります。
そこに処理を記述していきます。
使えるメソッド
create_table drop_table change_table rename_table add_column rename_column change_column remove_column add_index remove_index remove_index
例:
class AddColumnToUses < ActiveRecord::Migration def up add_column :users, :additional_column, :string end end
userテーブルにadditional_columnをstringで追加します。
2. コマンドを書いてmigrationファイルを自動生成する場合
下記コマンドを打つとmigrationファイルが生成されます
# rails g migration add_released_on_to_users additional_column:string
add_released_on_to_<tablename>
ここでテーブルを指定しますが、複数形になることに注意です
こんな感じ
<APP_ROOT>/db/migrate/タイムスタンプ(西暦、月、日、時、分、秒)_行う処理名.rb
中身は
class AddReleasedOnToUsers < ActiveRecord::Migration def change add_column :users, :additional_column, :string end end
最後はmigrate
# bundle exec rake db:migrate
未実行のmigrateファイルが実行されます。