• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
 

Eclipse上でPDTを使ってFuelPHPのプロジェクトをGit管理したかったので、EGit で github を使えるようにしてみました。

参考にさせていただいたサイトはこちら。
FuelPHPってなんじゃ?(Git管理編)

Eclipse、PDT、FuelPHP は既に使える状態になっているものとします。

まずはEclipseからGitを使えるように、EGit をインストールします。

Eclipse の Helpメニュー -> Install New Software でダイアログを開きます。EGitのダウンロード用URLはデフォルトで登録されているので、--All Available Sites-- の中から Collaboration -> Eclipse EGit を選択してインストールします。

インストールできたら Eclipse の Windowメニュー -> Preference でダイアログを開き、Team -> Git -> Configuration の User Settings タブで、New Entry ボタンをクリックして、user.name, user.email を設定します。

次にFuelPHPを使うプロジェクトを作成します。

   1  $ oil create contact
   2  $ cd contact

ここで気をつけなければいけないことがあります。oil create で作られたプロジェクトは、FuelPHPの github のリポジトリを clone して作られいるためGit管理になっています。その中でいくつかのディレクトリは git の submodule として登録されているのですが、通常はその中の .git はディレクトリになっているはずが、私の環境(Ubuntu12.04)ではファイルになっていて、中身は下記の用にプロジェクトルートの .git ディレクトリ配下のパスがかかれていました。

   1  $ cat fuel/core/.git
   2  gitdir: /home/akanuma/Learning/php/work/contact/.git/modules/fuel/core

CentOS環境で試した時にはディレクトリとして作成されていたので環境によるのだと思いますが、このままだとあとでコミット候補としてインデックスに登録しようとした時に、下記のようなエラーが表示されます。

   1  $ git add .
   2  fatal: Not a git repository: /home/akanuma/Learning/php/work/sample/.git/modules/fuel/packages/parser

また、submodule として登録した時にも下記のようにエラーになります。

   1  $ git submodule add git://github.com/fuel/core.git fuel/core/
   2  The following path is ignored by one of your .gitignore files:
   3  fuel/core
   4  Use -f if you really want to add it.

そこで、下記の用にして .git ファイルの中身がさしているディレクトリを .git ディレクトリとして移動します。

   1  $ rm fuel/core/.git
   2  $ mv .git/modules/fuel/core fuel/core/.git
   3  $ rm fuel/packages/auth/.git
   4  $ mv .git/modules/fuel/packages/auth fuel/packages/auth/.git
   5  $ rm fuel/packages/email/.git
   6  $ mv .git/modules/fuel/packages/email fuel/packages/email/.git
   7  $ rm fuel/packages/oil/.git
   8  $ mv .git/modules/fuel/packages/oil fuel/packages/oil/.git
   9  $ rm fuel/packages/orm/.git
  10  $ mv .git/modules/fuel/packages/orm fuel/packages/orm/.git
  11  $ rm fuel/packages/parser/.git
  12  $ mv .git/modules/fuel/packages/parser fuel/packages/parser/.git
  13  $ rm -rf .git/modules/fuel

次に、FuelPHP の Git 管理下から外すために下記のように Git 関連ディレクトリを削除します。

   1  $ rm -rf .git .gitmodule

ローカルリポジトリを初期化します。

   1  $ git init
   2  Initialized empty Git repository in /home/akanuma/Learning/php/work/contact/.git/

サブモジュールを追加します。

   1  $ git submodule add git://github.com/fuel/core.git fuel/core/
   2  Adding existing repo at 'fuel/core' to the index
   3  $ git submodule add git://github.com/fuel/oil.git fuel/packages/oil
   4  Adding existing repo at 'fuel/packages/oil' to the index
   5  $ git submodule add git://github.com/fuel/parser.git fuel/packages/parser
   6  Adding existing repo at 'fuel/packages/parser' to the index
   7  $ git submodule add git://github.com/fuel/email.git fuel/packages/email
   8  Adding existing repo at 'fuel/packages/email' to the index
   9  $ git submodule add git://github.com/fuel/auth.git fuel/packages/auth
  10  Adding existing repo at 'fuel/packages/auth' to the index
  11  $ git submodule add git://github.com/fuel/orm.git fuel/packages/orm
  12  Adding existing repo at 'fuel/packages/orm' to the index

ドキュメント類を削除します。

   1  $ rm *.md
   2  $ rm -rf docs

アプリケーション全体をコミット候補に加えるためにインデックスに追加します。

   1  $ git add .

ローカルリポジトリにコミットします。

   1  $ git commit -m 'First Commit.'

Eclipse の Fileメニュー -> New -> PHP Project で新規プロジェクト作成ダイアログを開きます。Project名を入力し、Content では Create project at existing location (from existing source) を選択し、oil create で作成したプロジェクトのルートディレクトリを選択し、Finish をクリックしてプロジェクトを作成します。

プロジェクトを右クリックし、Team -> Share Project を選択します。リポジトリタイプは Git を選択し次へ。Use or create repository in parent folder of project にチェックを入れ、先ほど作成したローかリポジトリを選択して Finish をクリックして共有設定をします。

再度プロジェクトを右クリックし、Team -> Commit でコミットダイアログを表示し、コメントを入力してから Commit をクリックしてコミットします。

さらにプロジェクトを右クリックし、Team -> Remote -> Push を選択してダイアログを表示し、Location に github のリポジトリの情報を入力して次へ。Source ref: で master を選択して Add Spec ボタンをクリックし、Finish ボタンをクリックして github への Push を実行します。

以上で FuelPHP のプロジェクトを github 管理下に置くことができます。

posted by Png akanuma on Sat 21 Jul 2012 at 11:54

CentOS上からgithubを使えるようにしたので作業内容をメモ。

まずはyumでgitをインストールします。ちなみにCentOSのバージョンは5.8です。

   1  # yum install git
   2  Loaded plugins: fastestmirror
   3  Loading mirror speeds from cached hostfile
   4   * base: rsync.atworks.co.jp
   5   * epel: ftp.iij.ad.jp
   6   * extras: rsync.atworks.co.jp
   7   * remi: rpms.famillecollet.com
   8   * updates: rsync.atworks.co.jp
   9  Setting up Install Process
  10  Resolving Dependencies
  11  --> Running transaction check
  12  ---> Package git.x86_64 0:1.7.4.1-1.el5 set to be updated
  13  --> Processing Dependency: perl-Git = 1.7.4.1-1.el5 for package: git
  14  --> Processing Dependency: rsync for package: git
  15  --> Processing Dependency: perl(Error) for package: git
  16  --> Processing Dependency: perl(Git) for package: git
  17  --> Running transaction check
  18  ---> Package perl-Error.noarch 1:0.17010-1.el5 set to be updated
  19  ---> Package perl-Git.x86_64 0:1.7.4.1-1.el5 set to be updated
  20  ---> Package rsync.x86_64 0:3.0.6-4.el5_7.1 set to be updated
  21  --> Finished Dependency Resolution
  22  
  23  Dependencies Resolved
  24  
  25  ========================================================================================================================
  26   Package                      Arch                     Version                             Repository              Size
  27  ========================================================================================================================
  28  Installing:
  29   git                          x86_64                   1.7.4.1-1.el5                       epel                   4.5 M
  30  Installing for dependencies:
  31   perl-Error                   noarch                   1:0.17010-1.el5                     epel                    26 k
  32   perl-Git                     x86_64                   1.7.4.1-1.el5                       epel                    28 k
  33   rsync                        x86_64                   3.0.6-4.el5_7.1                     base                   347 k
  34  
  35  Transaction Summary
  36  ========================================================================================================================
  37  Install       4 Package(s)
  38  Upgrade       0 Package(s)
  39  
  40  Total download size: 4.9 M
  41  Is this ok [y/N]: y
  42  Downloading Packages:
  43  (1/4): perl-Error-0.17010-1.el5.noarch.rpm                                                       |  26 kB     00:00
  44  (2/4): perl-Git-1.7.4.1-1.el5.x86_64.rpm                                                         |  28 kB     00:00
  45  (3/4): rsync-3.0.6-4.el5_7.1.x86_64.rpm                                                          | 347 kB     00:00
  46  (4/4): git-1.7.4.1-1.el5.x86_64.rpm                                                              | 4.5 MB     00:00
  47  ------------------------------------------------------------------------------------------------------------------------
  48  Total                                                                                   4.1 MB/s | 4.9 MB     00:01
  49  Running rpm_check_debug
  50  Running Transaction Test
  51  Finished Transaction Test
  52  Transaction Test Succeeded
  53  Running Transaction
  54    Installing     : perl-Error                                                                                       1/4
  55    Installing     : rsync                                                                                            2/4
  56    Installing     : git                                                                                              3/4
  57    Installing     : perl-Git                                                                                         4/4
  58  
  59  Installed:
  60    git.x86_64 0:1.7.4.1-1.el5
  61  
  62  Dependency Installed:
  63    perl-Error.noarch 1:0.17010-1.el5        perl-Git.x86_64 0:1.7.4.1-1.el5        rsync.x86_64 0:3.0.6-4.el5_7.1
  64  
  65  Complete!

続いてgithubのヘルプページを参考にして環境設定。 まずはコミット時に使うユーザ名とメールアドレスを設定します。

   1  $ git config --global user.name "h-akanuma"
   2  $ git config --global user.email "hiroaki.akanuma@gmail.com"

メールアドレスは正しいメールアドレスを設定する必要はなくて、コミットを識別するためのものなので、user@server のような形にしてどこからのコミットかを判別できるようにしても良いらしいです。

次はパスワードのキャッシュ設定。リモートサーバにアクセスするたびにパスワードを入力しなくても良いように、パスワードをキャッシュする設定をします。また、デフォルトのキャッシュの有効期限は15分間なので、とりあえず1時間に変更しておきます。

   1  $ git config --global credential.helper cache
   2  $ git config --global credential.helper 'cache --timeout=3600'

これだけでひとまず全体的な設定は終了なので、ブラウザでgithubにアクセスして新しくリポジトリを作成します。

そして再びCentOS上での作業です。バージョン管理対象にするディレクトリを作成して初期化します。

   1  $ mkdir PerlTools
   2  $ cd PerlTools/
   3  $ git init
   4  Initialized empty Git repository in /home/akanuma/scripts/PerlTools/.git/

バージョン管理したいファイルを作成し、ローカルリポジトリにコミットします。

   1  $ cp ../cut_time.pl .
   2  $ ls -la
   3  合計 16
   4  drwxrwxr-x 3 akanuma akanuma 4096  6月 10 00:29 .
   5  drwxrwxr-x 3 akanuma akanuma 4096  6月 10 00:28 ..
   6  drwxrwxr-x 7 akanuma akanuma 4096  6月 10 00:28 .git
   7  -rw-rw-r-- 1 akanuma akanuma 1336  6月 10 00:29 cut_time.pl
   8  $
   9  $ git add cut_time.pl
  10  $ git commit -m 'Script for cutting file content by time range'
  11  [master (root-commit) a677816] Script for cutting file content by time range
  12   1 files changed, 75 insertions(+), 0 deletions(-)
  13   create mode 100644 cut_time.pl

そしてローカルリポジトリへのコミット内容をgithubへpushします。

   1  $ git remote add origin https://github.com/h-akanuma/PerlTools.git
   2  $ git push origin master
   3  Username:
   4  Password:
   5  Counting objects: 3, done.
   6  Compressing objects: 100% (2/2), done.
   7  Writing objects: 100% (3/3), 757 bytes, done.
   8  Total 3 (delta 0), reused 0 (delta 0)
   9  To https://github.com/h-akanuma/PerlTools.git
  10   * [new branch]      master -> master

これでgithubへコミット内容が反映されました。 他のリポジトリのForkはまだやっていないのでまたそのうち。

posted by Png akanuma on Sun 10 Jun 2012 at 00:53

LionにするにあたってCode Snippetsを移動する必要があるのかなと思ったのですが、Code Snippetsはちゃんと〜/以下に格納されているので意識する必要はなさそうです。

ただ、新しいマシンに以降するとき等は作業をする必要があります。

Xcode 4のCode Snippetsを別のマシンに移動する stackoverflow

How Can One Transfer Xcode 4 Code Snippets from One Machine to Another
http://stackoverflow.com/questions/5261076/how-can-one-transfer-xcode-4-code-snippets-from-one-machine-to-another

上で見つけたんですが、こんな感じにsnippetsが格納されています:

   1  % pwd                                          
   2  ~/Library/Developer/Xcode/UserData/CodeSnippets
   3  % ls -1
   4  104B0BF3-0D45-4663-B56A-8DA5DB05A80B.codesnippet
   5  1F92BFD6-8936-4DD8-9AC6-98757661A9FE.codesnippet
   6  206B6C3E-457A-4BEE-A679-C31DB7126C66.codesnippet
   7  20D4FA3F-B205-4EBD-BCCA-568046C1D8F8.codesnippet

自作の.codesnippetファイルを追加してみる

1つのファイルをコピーして、IDECodeSnippetIdentifierを他と被らないように適当に編集後、Xcodeを立ち上げて見てみましたがちゃんと追加されていました。ファイル名は人間に分かりやすい名前にしていたのですが、無事認識されていました。

   1  add_action_sheet.codesnippet

で、~/Library/Developer/Xcode/UserData/CodeSnippetsをgitリポジトリに格納してみました。 運用的には下記のように:

  1. Code Snippets用のgitリポジトリを作成
  2. 新しいXcodeをインストールする前にgit push
  3. Xcodeをインストール
  4. Code Snippetsディレクトリにgit clone
  5. XcodeのCode Snippetsで移行されているかを確認

下記の記事も参照ください:

[git] 共有リポジトリを作る:git init --bare --shared=true
http://blog.s21g.com/articles/1312

[追記 2011.07.22]
@Seasons さんに教えて頂きました!Dropboxもいいですね。
ついでにDropboxでMac内の任意のフォルダを同期できるようにできるアプリ「MacDropAny」掲載されていました。便利♪:

Xcode 4のスニペットをDropboxで同期する - Seasons.NET
http://d.hatena.ne.jp/Seasons/20110328/1301300189

posted by Png satoko on Fri 22 Jul 2011 at 13:54

まずはローカルブランチを削除して

   1  % git push origin :hoge

でok。

posted by Png genki on Mon 22 Nov 2010 at 20:13 with 2 comments

手元のファイルは残しておきたいけれど、インデックスからは削除したいという場合には、以下のように --cached オプションをつけるとうまくいきます。

   1  % git rm --cached /path/to/files

ディレクトリをインデックスから削除する場合は -r オプションを忘れずに。

posted by Png genki on Tue 15 Jun 2010 at 02:02

普段のコミットログから作業日報的なものを生成したい場合、 以下のようなコマンドでそれらしいものが出力できます。

   1  % git log --author=takiuchi --format="%ad %s" --date=short

posted by Png genki on Wed 21 Apr 2010 at 08:47

git svnを使っていると、何度conflictを解決しても SVNに "Your file or directory '*' is probably out-of-date" と冷たく拒まれることがあります。 これを解決するには、XXXXにSVNのHEADに相当するコミットハッシュを指定して以下を実行します。

   1  % git checkout -b merging
   2  % git checkout trunk
   3  % git reset --hard <XXXX>
   4  % git svn fetch
   5  % git rebase trunk merging  # コンフリクトするので解決してコミット
   6  % git checkout -b merging2
   7  % git checkout trunk 
   8  % git merge merging2
   9  % git svn dcommit

結構面倒です。git-svnが賢くなってくれることに期待します。

posted by Png genki on Thu 15 Apr 2010 at 03:24

git svn rebaseを行って conflict が発生した場合、 (no branch) になってしまいます。

この場合、手動でconflictを解決してcommitしたあと、

   1  % git log -1 --pretty=oneline

でコミットのハッシュを確認し、git checkoutでmerge先のブランチに 移動してから git merge <commit hash> すればokのようです。

posted by Png genki on Wed 14 Apr 2010 at 08:19 with 2 comments

git submodule update を行ったときに

   1  fatal: reference is not a tree: dfae...

というようなエラーが出ることがありました。 これを解決する方法は、 submoduleのディレクトリに移動し、

   1  % git reset --hard

で親ディレクトリに戻り、コミット & push

あとは普通に git submodule update をすればok.

posted by Png genki on Sun 28 Mar 2010 at 18:48

git svnを以下のような構成で使っていた時に、git svnのリモートトラッキングブランチのpointerがtrunkに代わってしまい、いつのまにかブランチにcommitしたつもりのものがtrunkにcommitされるという事があり、困りました。

ss

gitから.gitにpushしたものを git-svnからpullしたタイミングで発生するようです。 解決策としては、git-svnでgit pullをせずに、

   1  % git fetch remote-name
   2  % git merge --no-ff remote-name/branch-name
   3  % git svn dcommit

でok. アクシデンシャルなdcommitを防ぐには、--dry-runが便利です。

posted by Png genki on Fri 5 Mar 2010 at 11:23 with 1 comment