GitHub+SourceTreeで複数アカウント設定

会社用リポジトリとプラベート用リポジトリで、複数アカウントをGitHub連携できなかったため、そのメモ。

仕組み

  • GItHubのURLごと(ドメイン+サブドメインの組み合わせごと)にパスワードがCredentialsという名前でキーチェーンに保存される
  • キーチェーンは アプリケーション > ユーティリティ > キーチェーン > (ログインメニュー選択)GitHub Credentials で存在を確認できる
  • しかし、GitHubはドメインのスラッシュ以下にアカウント名が含まれているため、Credentialsが複数アカウントごとに作成されない。例えば以下2つのリポジトリは1つしかCredentialsが作成できない。

対応方法

OAuthのアカウント連携をした上で、リポジトリURL「github.com」の前に「アカウント名@」を含めてSourceTreeに設定する。

  • 256haxがGitHubアカウント名だった場合 → https://256hax@github.com/256hax/tanebox.git
  • tarou-yamadaがGitHubアカウント名だった場合 → https://tarou-yamada@github.com/hanami/hanami.git

    もしすでにキーチェーンを作成している場合

    キーチェーンにある該当の「GitHub Credentials」を削除して、上記の「対応方法」を再度設定する必要がある。一度作成されてしまっているとうまくアカウントが分けられない。

    よくある症状

    アカウントがうまく分けられていないと、プッシュした時に「Pushing to [リポジトリ名]」のままで永遠に終わらない ← これはアカウント認証が通らないことが原因。2つアカウントがあったとして、どちらか一方のリポジトリのプッシュは成功するが、もう一方は成功しない(Pushing toが終わらない)という症状がでる

    参考サイト

    GitHubの複数アカウントを使い分けるならSSHよりhttpsの方がいいんじゃね?という話

    Written with StackEdit.

    ローカルのファイル群をSourceTree経由でGithHubに初めてコミットする

    作成していたアプリはBitBucketと連携してprivateリポジトリで運用していたが、GitHubに公開することにしたため、その時の手順メモ。すでにローカルに作業中のファイルがあると、リモートリポジトリ(GitHub)からクローンできないため(空フォルダじゃないと怒られる)、ローカルのファイルをリモートリポジトリにアップする方法を記載。
    (強引なやり方な気がするため、仕事で管理しているものは、社内の識者に確認された方がよいです。)

    手順

    ローカルで作業中のファイル群(プロジェクトフォルダ)があり、SourceTreeをすでに使っている想定で記載。

    1. GitHubでアカウント登録する

    2. GitHubで新規にリポジトリを作成する

    3. SourceTreeで作成済みのリポジトリを削除する


    その前に念のためプロジェクトのフォルダを丸ごとコピペしておく。失敗してもそれを元に戻せば直る。

    4. ローカルにあるプロジェクトフォルダ内の.gitフォルダを丸ごと削除する

    5. SourceTreeでローカルリポジトリを新規作成する(対象のプロジェクトフォルダのルートを指定する)

    6. 右上の歯車アイコンからリモートを選択して、GitHubアカウントを追加する

    7. プルしてローカルにマージする

    これやらないでコミット・プッシュすると、GitHubにプッシュできなくてエラー1になったりするため、必ずプルしておくこと。
    [ローカル] –> [ローカルのリポジトリ] –> [GitHubのリポジトリ
    1]

    8. 普通にローカルからコミット・プッシュする

    9. 以上で完了

    参考サイト

    Written with StackEdit.

    CakePHP 1.3.x のACLサンプルプログラム

    結論から書くと、勉強用や参考になるかなと思い、
    CakePHPのACLサンプルプログラムを
    ダウンロードできるようにgithubへアップしました。

    I uploaded to GitHub CakePHP ACL sample programs
    for study.

    ■GitHubサンプルプログラム(GitHub sample programs)
      256hax/CakePHP-1.3.x-ACL-samples – GitHub

    アクセスしたら左上の [ZIP] ボタンを押して
    ダウンロードできます。
    そのあと、同じページに「README」が
    書いてありますので、それをご参照ください。

    ■経緯
    CakePHPのACLをチュートリアルをもとに
    実装していたが、ややこしいうえに自分のやり方が
    悪いのか、ちゃんと動作しなかった。
    幸いにもエンジニアの人が解説したブログが
    たくさんあったので、なんとか動くようになった。
    ただ、意外にも「ダウンロードしてすぐ動かせる」
    っていうファイル群が見つからなかったので、
    ACLのサンプルプログラムを丸ごとアップしてみようと思う。

    ■参考サイト
     ACL を制御するシンプルなアプリケーション :: 開発例 :: マニュアル :: 1.3コレクション
     CakePHP ACL – アクセス制御リストを攻略する | hijiriworld Web Creators
     CakePHP – ACLの権限管理を超簡単にするプラグイン『Plugin ACL』 – 高橋です
     cakePHP チュートリアル「ACL を制御するシンプルなアプリケーション」 その1 – SystemGathering
     CakePHP – Auth component loop redirect 

    ■リダイレクト無限ループについて
     CakePHP 1.3.x のACLチュートリアルを実装後、
     UsersControllerの「$this->Auth->allow(‘*’);」を
     外すと、どのページにアクセスしても
     リダイレクトループ(ページ転送がループ)してしまい
     ダメだった。結局、下記のようにし、あとは
     パーミッションで対応(但し、下記方法が合ってるか不明)。

    function beforeFilter() {
    parent::beforeFilter();
    //$this->Auth->allow(‘*’); 
    if(isset($this->params[‘requested’])) {
    $this->Auth->allow($this->action);
    }
    }
     
     

     あと、CakePHPチュートリアルの パーミッションの手動設定
     追加のみ実行可能で、変更はできないようで、
     色々いじったところ、混乱してハマった。

     なので、 ACL Plugin を使ったほうが確実。