GitHubのリポジトリをローカルにClone

前回申し込んだGitHubのリポジトリをローカルにクローンする。

基本的にはgit for windowsをインストールしてgitlabのプロジェクトを操作に記載した内容でOK。
今回は既にGitLabのリポジトリへの接続環境が作成されているPC上にGitHubのリポジトリへの接続環境を構築する。
GITHUBもGITLABと同様にSSHキーを必要とするため以下に従って作成。(保存するファイルはデフォルトではなくgithub_kernel_rsaに変更)

[code]
C:\Git\usr\bin>ssh-keygen -t rsa -C ‘メールアドレス’
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/tarumi/.ssh/id_rsa): /c/Users/tarumi/.ssh/github_kernel_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/tarumi/.ssh/github_kernel_rsa.
Your public key has been saved in /c/Users/tarumi/.ssh/github_kernel_rsa.pub.
The key fingerprint is:
省略
C:\Git\usr\bin>
[/code]

なぜかファイル名が文字化けしていたので修正

GitHubのサイトにSSHキーを登録

GItHubのサイトの「your profile」を表示

「Edit Profile」ボタンを押す

「SSH and GPG keys」を選択し「New SSH Key」ボタンを押す

github_kernel_rsa.pubの内容を貼り付ける

C:\Git\etc\ssh\ssh_configを以下に従って編集
※この設定は複数のGITリポジトリ(GITLABとGITHUB)とアクセスするために設定する

[code]
Host gitlab
User git
Port 22
HostName gitlab.com
TCPKeepAlive yes
identitiesonly yes
identityFile /C/Users/tarumi/.ssh/id_rsa

Host github
User git
Port 22
HostName github.com
TCPKeepAlive yes
identitiesonly yes
identityFile /C/Users/tarumi/.ssh/github_kernel_rsa
[/code]

github上のリポジトリをローカルにクローン

今回はC:\githubhomeディレクトリ以下にローカルリポジトリを作成していく。

通常(ssh_configの設定を使用しない)はgithubのリポジトリサイトを表示し「clone or download」ボタンを押しsshのURLを表示し

以下のコマンドでgithub上のリポジトリをローカルにクローンする。

[code]
git clone git@github.com:組織名/test.git
[/code]

今回(ssh_configの設定を使用)は以下のコマンドでクローンする

[code]
git clone git@github:組織名/test.git
[/code]

上記で指定したgithubはssh_configのHostに指定した値

[code]
C:\githubhome>git clone git@github:組織名/test.git
Cloning into ‘test’…
Enter passphrase for key ‘/C/Users/tarumi/.ssh/github_kernel_rsa’:
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
[/code]

リポジトリのフォルダに移動して以下のコマンドでgitへの接続ユーザーの設定を行う

[code]
C:\>cd githubhome
C:\githubhome>cd test
C:\githubhome\test>git config –local user.email ‘メールアドレス’
C:\githubhome\test>git config –local user.name ‘ユーザー名’
C:\githubhome\test>git config –local core.quotepath off
[/code]
引数に–localを付けたときはローカルリポジトリのフォルダ内のみで有効な設定として保存される。

設定した内容はローカルリポジトリ内の.gitフォルダに保存される

GITHUBをTEAMで始める

弊社でも社内リソースの管理にいよいよGITHUBを一部導入にあたり、各種設定をメモ。
※ローカル環境には既にGITLABへの接続環境が既に構築済

GITHUBへの申し込み

最初に個人としてGITHUBみ申し込み

その後GITHUB画面上の「New Organization」を選択

組織名、請求書送付先のメールアドレスを入力。

今回は会社で使用するのでTeamを選択して支払い情報を入力してOrganizationの作成は終了

この時点では自分以外のメンバーは登録しない。

最初にデフォルトのポリシーで基本全てのメンバーはリポジトリへの権限をなくします。

※デフォルトではすべてのメンバーは全てのリポジトリーへの閲覧権限を持っている

Organizationの設定ページ-Member Privilegesページを表示

Repository permissionsのOrganization membersをNONEに設定

リポジトリの作成

「new repository」メニューを選択

OwnerにOrganizationを指定しリポジトリ名を入力、スコープを指定して「Create Organization」を選択

TEAMの作成

OrganizationのTOPページよりTEAMタブを表示して、「New Team」をクリック

Team名を入力し、Team visibilityをSecretに設定し「Create Team」を選択

以上でTeamの作成は終了

Teamにメンバーを追加

Teamのページを開き、「members」のページを開く

「Add Member」をクリック

メンバーを入力してメンバーの追加は終了

リポジトリの権限設定

Teamにリポジトリの権限を設定

リポジトリの設定ページを開く

「Collaborators & teams」ページを表示

Teamの権限を設定

以上でGITHUBサイト上の設定は終了

MySQL プライマリーキー追加

[code]
ALTER TABLE テーブル名 ADD PRIMARY KEY(項目名)
[/code]

mysqlでエラー1093

mysql 5.7.9を新規に立ち上げmysql 5.1.39上で動作していたシステムを移行したところ

エラー1093が発生
[code]
1093 You can’t specify target table ‘テーブル’ for update in FROM clause UPDATE テーブル SET FD5001 = (SELECT MAX_VAL FROM (SELECT IFNULL(MAX(T1.FD5001), 0) AS MAX_VAL FROM テーブル T1) T) WHERE MESH_NO = ‘999999999’
[/code]

updateの対象テーブルをサブクリーのfromで指定するなという至極まともなエラーだけど、やっぱり今まで動作していたSQLは動作して欲しい!

ということで調べると
my.cnfに以下を追加するとよいとのこと

[code]
optimizer_switch=derived_merge=off
[/code]

記述後mysqlを再起動してもエラーは出っ放し!

show varablesで確認すると設定は正しく反映されている

結局5.7.9をあきらめ5.7.21をインストールした。

5.7.9はこれ以外にも問題が多すぎる

MySQL イベントスケジューラー

MySQLのイベントスケジューラーはバッチ処理やセッション管理に利用可能。

イベントスケジューラーが有効かを確認

[code]
mysql> show variables like ‘%event%’;
+———————————————————-+——-+
| Variable_name | Value |
+———————————————————-+——-+
| binlog_rows_query_log_events | OFF |
| event_scheduler | OFF |
| log_bin_use_v1_row_events | OFF |
| performance_schema_events_stages_history_long_size | 10000 |
| performance_schema_events_stages_history_size | 10 |
| performance_schema_events_statements_history_long_size | 10000 |
| performance_schema_events_statements_history_size | 10 |
| performance_schema_events_transactions_history_long_size | 10000 |
| performance_schema_events_transactions_history_size | 10 |
| performance_schema_events_waits_history_long_size | 10000 |
| performance_schema_events_waits_history_size | 10 |
+———————————————————-+——-+
11 rows in set (0.00 sec)
[/code]

my.cnfのmysqldセクションに以下を記述して再起動

イベント用のクエリを作成し、実行

[code]
CREATE EVENT イベント名
ON SCHEDULE
EVERY 5 MINUTE STARTS ‘2015-06-30 15:00:44’
ON COMPLETION PRESERVE
ENABLE
COMMENT ‘コメント’
DO BEGIN

イベントで行う処理

END
[/code]

MySQL group byでエラー

MySQLのバージョンを5.1.39から5.7.9にあげたら今まで動作していたSQLがエラーになった。

ログを確認すると以下のエラーが出力されていた。

[code]
DB EXECUTE ERR 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘項目名’
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
[/code]

group by した項目以外はselectできないよというエラー。

もちろんそれは正しいが、今まで動作していたSQLは引き続き動作してほしい。

MySQLは5.7からsql_modeにonly_full_group_byが設定されているようだ。

念のためにsql_modeに何が設定されているかを確認。

■バージョン5.1.39の場合
mysql> show variables like ‘sql_mode%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| sql_mode | |
+—————+——-+
1 row in set (0.00 sec)

■バージョン5.7.9の場合
mysql> show variables like ‘sql_mode%’;
+—————+——————————————————————————————————————————————-+
| Variable_name | Value |
+—————+——————————————————————————————————————————————-+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+—————+——————————————————————————————————————————————-+
1 row in set (0.00 sec)

my.cnfに以下の記述を追加する。

[code]
sql_mode=”
[/code]

以上でエラーは回避できる

git 作業ディレクトリとインデックスの差分を表示

[code]
git diff
[/code]

git ローカルリポジトリとリモートリポジトリの差分を比較

[code]
git diff master origin/master
[/code]

master:ローカルリポジトリのブランチ
orgin/mastre:リモートリポジトリのURL/ブランチ

Gitについて

リモートリポジトリについて

リモートリポジトリを特定するにはOriginとブランチを指定する。

OriginはURLのaliasであり、ブランチは枝を表す。

例えばローカルリポジトリの内容をリモートリポジトリに反映する時は以下のコマンドを使用

[code]
git push origin master
[/code]

originはリモートリポジトリのURL
masterはブランチ

以下のコマンドで現在のoriginの情報を確認する

[code]
git config –list
[/code]

出力結果
[code]
core.symlinks=false
core.autocrlf=false
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean — %f
filter.lfs.smudge=git-lfs smudge — %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.email=’tarumi@kk-kernel.co.jp’
user.name=’tarumi
core.quotepath=off
core.editor=’/C/Program Files (x86)/Hidemaru/hidemaru.exe’ //fu8
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
remote.origin.url=git@gitlab.com:ワークスペース名/プロジェクト名.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
[/code]

[code][/code]

git 変更をキャンセル

ソースファイルを編集したがコミット前にやっぱり元に戻したい時はcheckoutコマンド

[code]
git checkout ブランチ名 ファイル名
[/code]

ローカルリポジトリのブランチは以下のコマンドで確認
[code]
git branch
[/code]

コミット前であればインデックスに反映した後でも有効

以下は例
[code]
C:\githome\prvkernel\freearea>git status
On branch master
Your branch is ahead of ‘origin/master’ by 2 commits.
(use "git push" to publish your local commits)

Changes to be committed:
(use "git reset HEAD <file>…" to unstage)

modified: source/FreeArea/FreeArea.suo

C:\githome\prvkernel\freearea>git branch
* master

C:\githome\prvkernel\freearea>git checkout master source/FreeArea/FreeArea.suo

C:\githome\prvkernel\freearea>git status
On branch master
Your branch is ahead of ‘origin/master’ by 2 commits.
(use "git push" to publish your local commits)

nothing to commit, working tree clean

[/code]