20201124のGitに関する記事は5件です。

【2021年版】Git入門者が1日目に覚えるべき操作まとめ

はじめに

チーム開発で必要とされる最低レベルのGit操作を少しの説明を交えて解説していきます。
GitHubと連携してチームでソースコードを管理できるのは知ってるけど、それより先は。。。っていうぐらいの理解度の方が対象者です。

準備

gitのインストール

説明してくれているサイトが多くあるので、自分でググったり以下のサイトを参考にするといいと思います。
macユーザー:https://tracpath.com/bootcamp/git-install-to-mac.html
windowsユーザー:https://www.kkaneko.jp/tools/win/git.html
パスも通り、以下のコマンドを打ってバージョンが表示されればOKです!

$ git --version
git version 2.26.1

GitHubアカウントの登録

未登録の方は、以下から登録しましょう。
https://github.com/

初期設定

gitのインストールとGitHubアカウント取得が完了したら、gitにユーザーを登録します。これを行わないと、GitHubアカウントと連携することができません。
以下のコマンドでユーザー名とメールアドレスを登録しましょう。GitHubアカウントとの連携はメールアドレスで行っているため、同じものを登録しましょう。ユーザー名もわかりやすく同じものを登録しておけば大丈夫です。

$ git config --global user.name "<ユーザー名>"
$ git config --global user.email "xxxx@example.com"

登録が完了したら、確認してみましょう。
こちらのコマンドで、gitに関する設定を一覧化することができます。

$ git config --list
~~(略)~~
user.name=username
user.email=xxxx@example.com

名前とメールアドレスが記載されていればOKです!
~/.gitconfigにも設定内容が書かれているのでこちらを確認してもよいです。

GitHubでリポジトリ作成

GitHubにログインしたら左側にレポジトリに関する場所があり、「New」を押すと新しいレポジトリを作成できます。
create_repo.PNG

次に、レポジトリ名や説明を入力して、パブリックかプライベートかを選択します。インターネット上に公開してもよい場合はPublicを選択します。
図にはありませんが、「Create Repository」をクリックすれば作成完了です!
create_repo2.PNG

ローカルのフォルダをgitと紐づける

ローカルPCの好きな場所にフォルダを作成します。
フォルダがあるディレクトリに移動し、以下のコマンドを実行します。

$ git init

これをすることによりフォルダ直下に、git管理下であることを意味する.gitが作られます。

$ git remote add origin https://github.com/(username)/(reponame).git

ローカルとGitHubレポジトリを紐付けます。originとはリモートリポジトリのことで、今回の場合はoriginをhttps://github.com/(username)/(reponame).gitに設定するという意味になります。

変更内容をリモートに反映する

ローカルのファイルを変更した後、GitHubにその内容を反映させる作業を「プッシュする」といいます。ただし、その前に2つほどステップを踏む必要があります。具体的には以下の順序を踏みます。

0.プル → (作業) → 1.ステージング → 2.コミット → 3.プッシュ

0.プル

ローカルで作業するときは事前に環境をリモートの最新状態と同じにしておく必要があります。

$ git pull

1.ステージング

作業が終わったら、コミットするファイルを指定し、ステージにあげます。

$ git add (ファイル名)

ただし、特に理由がない場合は全て指定するのがいいです。
ファイル名のところをピリオドにすればファイルを全て選択できます。

$ git add .

2.コミット

変更内容をひとまとめにすることをコミットといいます。基本的に機能単位ごとに行われます。(ボタンを追加した等)
プッシュをしたあとにやっぱり戻したいってなったときには、コミットの単位で切り戻しを行うことになるので、変更内容がわかる範囲でこまめにコミットするのが良いと思います。

$ git commit -m "ボタンの追加"

コミットする際は、変更内容がわかるようにコメントをつける必要があります。
これで誰が何をどう変更したのかが一目でわかるようになります。

3.プッシュ

コミットの内容をリモートに反映させます。

$ git push origin master

このコマンドはorigin(リモートレポジトリ)のmasterブランチにプッシュするという意味です。
ブランチの説明はあとで出てきますので今はスルーで大丈夫です。

これで変更内容がGitHubにも反映されていることが確認できます。

ブランチを切る

gitやGitHubではデフォルトでmasterブランチが作成されます。
本番環境に影響を与えることなく開発環境で作業したい場合や、複数人でお互いに影響を与えずに作業したい場合はmaster(本流)からブランチ(枝、支流)を作成していきます。今回は、masterを本番環境、developを開発環境としてブランチを切るところからマージするところまでやっていきます。イメージとしては以下のような感じです。

スクリーンショット 2020-11-19 11.24.48.png

1.現在いるブランチの確認

$ git branch
* master

*がついてるのが今いるブランチです。masterからブランチを切るときはまず自分がmasterブランチにいることを確認してください。

2.ブランチを切って、そのブランチに移動

masterブランチ上で以下のコマンドを実行します。

$ git checkout -b develop
Switched to a new branch 'develop'

developブランチが作成されたと同時にdevelopブランチ上に移動していることがわかります。

$ git branch
* develop
  master

3.GitHub(リモートリポジトリ)と同期する

今はローカルにしかdevelopブランチがない状態なので、GitHubに同期します。

$ git push origin develop

初回のプッシュ時はGitHub上で新しいブランチが作成されます。

さいごに

お疲れ様でした。
初日でこれぐらいできるようになれば十分です!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitのcherry-pickを取り消す

cherry-pickで反映したコミットは「git reset」コマンドで取り消すことができる。

$ git reset --hard HEAD~

cherry-pickしたブランチをリモートに上げてしまっている場合、取り消ししたブランチをpushしようとすると以下のようなエラーになってしまう。

$ git push origin master
To https://gitlab.com/hoge/hogehoge.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitlab.com/hoge/hogehoge.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

これを回避するため、pushする際は「-f」オプションをつける必要がある。

$ git push -f origin master

※「git reset」コマンドを使用する場合ログに残らないので、残したい場合は「git revert」コマンドを使用する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PowerLineが使いやすくなってたので試してみた

はじめに

まずPowershellにPowerLineを適用するとどうなるのかですが、

  • カレントフォルダ表示がLinux風になる
  • コマンド実行時刻が各行表示される
  • Gitの情報が常時みれる

過去失敗したけど、今すごく簡単にできたし、
見たい情報がすぐ見れる(=サボれる)のでオススメです。
fdsa.png

今日の午後

SSHの設定方法をMS Docsで読んでいたら、
隣のページにPowerLineが載っているではないですか!
以前やろうとして詰んだ記憶がよみがえります。

うわ、簡単にできた!

過去の失敗

  • 自機がLinuxやUnixのプログラマーは当たり前のように使っているらしい。
  • なんかキレイで見やすいらしい
  • PowerLineってのだとPowershellにも適用できるらしいぞ?!

こんな感じの理由から半年前くらいに挑戦したのですが、
全然上手く設定できず、何が間違いなのかも分からず終わりました。

適用前

Microsoft-Windows-Terminalで表示していますが、
これが通常のpwshですね。素っ気ないです。
error.png

適用後

Untitled.png
ccc.png

なにが書いてあるの

fdsa.png

この画像に書いてあることを日本語訳すると、

カレントユーザー名@ドメイン名  ホームディレクトリ/ドキュメント/Github用のフォルダ/Githubリポジトリ/testモジュール格納フォルダ Git絵文字 ブランチ名 ↑未Push変更総数 +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ前の削除ファイル数 | +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ中の削除ファイル数 [当行表示時刻の時:当行表示時刻の分]

長すぎて読みにくいので改行すると、こうなります。

カレントユーザー名@ドメイン名
  ホームディレクトリ/ドキュメント/Github用のフォルダ/Githubリポジトリ/testモジュール格納フォルダ
 Git絵文字 ブランチ名
 ↑未Push変更総数 +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ前の削除ファイル数 | 
+ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ中の削除ファイル数
 [当行表示時刻の時:当行表示時刻の分]

改めて、コンパクトってありがたいですね。

どうやってやるの

Gitを入れておく

やる前に、gitコマンドが使えるようにPath環境変数を設定しておいてください。

PS Gallery からモジュールをインストール

おもむろに Powershell 7 を開いて、下記2行を実行します。

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Powershell 7 の場合のみ下記1行を実行します。 Powershell 5.1 以前の Powershell の場合はいりません。

Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck

※PSGalleryを信用しますか?とか聞かれます。

Windows-Terminal で使う

下記コマンドで、カレントユーザーのPowershellプロファイルをメモ帳で開きます。

notepad $PROFILE

その中に、下記コマンドを書き込みます。

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

ここまでで、一応使えるようになっています。
VscodeやWindowsTerminalなどで、このプロファイルを開始時に読み込むため、
上記でimport-moduleしたモジュールが読み込まれます。

テーマを設定できる

また、上記プロファイルでは、Set-Themeでテーマ設定しています。
標準で用意されたテーマを選択することが出来ます。
fishとか、Operatorとかカッコいいですね。
image.png
自作テーマも使えるらしいです。

文字化けを直すためにCascadia Fontsを入れる

しかし、文字化けするので、Cascadia Fonts を入れます。この時、Cascadia .* PLのように、
末尾にPLが付いているものを必要とします。「Powerline Glyph」の有無が違うらしいです。

Cascadia Fonts | Github からダウンロードできます。
手動でインストールする場合には、unzipして、TTFファイルを右クリックしてインストールします。

面倒なので、Chocolateyコマンドを使い、一発インストールします。

choco install cascadiafonts

Windows-Terminalで文字化けを直す

Fontを入れたら、"fontFace": "Cascadia Code PL",という文字列をWindows-Terminalの設定ファイルに書き込みます。

{
    // Make changes here to the powershell.exe profile.
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "name": "Windows PowerShell",
    "commandline": "powershell.exe",
    "fontFace": "Cascadia Code PL",
    "hidden": false
},

こんな感じで、末尾のカンマ,に気を付けて記入しましょう。
間違えるとエラーメッセージがでます。

Vscodeで文字化けを直す

Win:「Ctrl」+「,」、Mac:「⌘」+「,」で設定画面を出し、Font Family の先頭にcascadia codeを追記します。
image.png

Powershell単体だと挙動がおかしい

フォント設定には管理者権限が必要

常にフォントをcascadia codeにするためには、管理者権限で設定してあげるとOKです。
通常は下記のエラーメッセージがでて、設定を保存することができません。
image.png

チカチカする

コマンドを入力して、Enterキーを入力するたびに、
一度標準フォントに戻ってからcascadia codeになります。
まるで、3Ⅾホログラムの変装をしている悪役ですね。
うっとうしいですが、もっぱら Windows-Terminal や Vscode 経由でしか使わないので平気です。

やっぱり公式

公式にコミットされている人たちに感謝です。
積極的に参考にしていきたいですね。
https://docs.microsoft.com/ja-jp/windows/terminal/tutorials/powerline-setup

Excelsior!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PowerLineを久々試してみたら簡単にPowerShellが見やすくなった

はじめに

まずPowershellにPowerLineを適用するとどうなるのかですが、

  • カレントフォルダ表示がLinux風になる
  • コマンド実行時刻が各行表示される
  • Gitの情報が常時みれる

過去失敗したけど、今すごく簡単にできたし、
見たい情報がすぐ見れる(=サボれる)のでオススメです。
fdsa.png

今日の午後

SSHの設定方法をMS Docsで読んでいたら、
隣のページにPowerLineが載っているではないですか!
以前やろうとして詰んだ記憶がよみがえります。

うわ、簡単にできた!

過去の失敗

  • 自機がLinuxやUnixのプログラマーは当たり前のように使っているらしい。
  • なんかキレイで見やすいらしい
  • PowerLineってのだとPowershellにも適用できるらしいぞ?!

こんな感じの理由から半年前くらいに挑戦したのですが、
全然上手く設定できず、何が間違いなのかも分からず終わりました。

適用前

Microsoft-Windows-Terminalで表示していますが、
これが通常のpwshですね。素っ気ないです。
error.png

適用後

Untitled.png
ccc.png

なにが書いてあるの

fdsa.png

この画像に書いてあることを日本語訳すると、

カレントユーザー名@ドメイン名  ホームディレクトリ/ドキュメント/Github用のフォルダ/Githubリポジトリ/testモジュール格納フォルダ Git絵文字 ブランチ名 ↑未Push変更総数 +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ前の削除ファイル数 | +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ中の削除ファイル数 [当行表示時刻の時:当行表示時刻の分]

長すぎて読みにくいので改行すると、こうなります。

カレントユーザー名@ドメイン名
  ホームディレクトリ/ドキュメント/Github用のフォルダ/Githubリポジトリ/testモジュール格納フォルダ
 Git絵文字 ブランチ名
 ↑未Push変更総数 +ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ前の削除ファイル数 | 
+ステージ前の追加ファイル数 ~ステージ前の変更ファイル数 -ステージ中の削除ファイル数
 [当行表示時刻の時:当行表示時刻の分]

改めて、コンパクトってありがたいですね。

どうやってやるの

Gitを入れておく

やる前に、gitコマンドが使えるようにPath環境変数を設定しておいてください。

PS Gallery からモジュールをインストール

おもむろに Powershell 7 を開いて、下記2行を実行します。

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Powershell 7 の場合のみ下記1行を実行します。 Powershell 5.1 以前の Powershell の場合はいりません。

Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck

※PSGalleryを信用しますか?とか聞かれます。

Windows-Terminal で使う

下記コマンドで、カレントユーザーのPowershellプロファイルをメモ帳で開きます。

notepad $PROFILE

その中に、下記コマンドを書き込みます。

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

ここまでで、一応使えるようになっています。
VscodeやWindowsTerminalなどで、このプロファイルを開始時に読み込むため、
上記でimport-moduleしたモジュールが読み込まれます。

テーマを設定できる

また、上記プロファイルでは、Set-Themeでテーマ設定しています。
標準で用意されたテーマを選択することが出来ます。
fishとか、Operatorとかカッコいいですね。
image.png
自作テーマも使えるらしいです。

文字化けを直すためにCascadia Fontsを入れる

しかし、文字化けするので、Cascadia Fonts を入れます。この時、Cascadia .* PLのように、
末尾にPLが付いているものを必要とします。「Powerline Glyph」の有無が違うらしいです。

Cascadia Fonts | Github からダウンロードできます。
手動でインストールする場合には、unzipして、TTFファイルを右クリックしてインストールします。

面倒なので、Chocolateyコマンドを使い、一発インストールします。

choco install cascadiafonts

Windows-Terminalで文字化けを直す

Fontを入れたら、"fontFace": "Cascadia Code PL",という文字列をWindows-Terminalの設定ファイルに書き込みます。

{
    // Make changes here to the powershell.exe profile.
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "name": "Windows PowerShell",
    "commandline": "powershell.exe",
    "fontFace": "Cascadia Code PL",
    "hidden": false
},

こんな感じで、末尾のカンマ,に気を付けて記入しましょう。
間違えるとエラーメッセージがでます。

Vscodeで文字化けを直す

Win:「Ctrl」+「,」、Mac:「⌘」+「,」で設定画面を出し、Font Family の先頭にcascadia codeを追記します。
image.png

Powershell単体だと挙動がおかしい

フォント設定には管理者権限が必要

常にフォントをcascadia codeにするためには、管理者権限で設定してあげるとOKです。
通常は下記のエラーメッセージがでて、設定を保存することができません。
image.png

チカチカする

コマンドを入力して、Enterキーを入力するたびに、
一度標準フォントに戻ってからcascadia codeになります。
まるで、3Ⅾホログラムの変装をしている悪役ですね。
うっとうしいですが、もっぱら Windows-Terminal や Vscode 経由でしか使わないので平気です。

やっぱり公式

公式にコミットされている人たちに感謝です。
積極的に参考にしていきたいですね。
https://docs.microsoft.com/ja-jp/windows/terminal/tutorials/powerline-setup

Excelsior!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[TouchDesigner]gitでのバージョン管理を支援するtox

この記事はTouchDesigner Advent Calendar 2020の2日目の記事です。

前日(1日目)の記事は @miwa_maroon さんの「[Touchdesigner]新卒でもハンドトラッキングできるんじゃ! leapmotionとともに」です。

翌日(3日目)の記事は〜〜〜(公開されたら追記します)


さてみなさんいきなりですが、toeファイルのバージョン管理、諦めてませんか?

> git log --oneline --name-status
f4b6ef7 (HEAD -> main) パラメータをいい感じに変更
M       proj/main.toe
dfc410b みやすく整理
M       proj/main.toe
d4425b2 いい感じのフィルタを追加
M       proj/main.toe
78f5ca4 テクスチャサイズをちょっと小さくした
M       proj/main.toe

コミットメッセージを細かく書こうにも限界があるし、自動マージ無理だしコンフリクトなんて起きたときはもう、ねえ?

要は変更の差分が見えれば良いわけなので、それができるものを作ってみました。

https://github.com/nariakiiwatani/VersioningTouchDesignerNetwork

使い方

NetworkExporter.toxをどこかに置くだけ!
スクリーンショット 2020-11-24 14.23.38.png

できること

  • 監視対象(デフォルト:/)とその下層のオペレーターの情報(オペレータータイプ、位置、サイズ、タグ、コメント、各種フラグ、OP間の接続、パラメータ)をJSONファイルにexport
  • 上記処理をPreSave/PostSaveからフック

上のスクショの状態だと、書き出されるファイル群はこんな感じになります。
オペレーター毎にJSONファイルがあり、COMPに対しては同名のフォルダがくっつき、下層の情報がフォルダ内に書き出されています。
network_structureはtoxのパラメータで指定できる書き出しパス
スクリーンショット 2020-11-24 14.07.35.png

エスケープシーケンスで読み辛いけど書き出しのスクリプトはこんな感じ(ちなみにこれは書き出しスクリプトが書いてあるTextDATのエクスポート結果。TouchDesignerのファイルの中身をこういう形で見せられるの、すごくよくない?)
export_script
module_extract

JSONファイルはデータ毎にいちいち改行するフォーマットになっているので、gitでdiffを見るのに向いていると思います。
TextDATやTableDATの内容もちょっと冗長な感じ(JSON string arrayなので……)になってしまいますが一応行ごとに差分が取れる作りになってます。

こういうファイルがオペレーター毎に作られます。

execute1.json
{
    "name": "execute1",
    "OPType": "executeDAT",
    "comment": "",
    "nodeX": 100,
    "nodeY": 275,
    "nodeWidth": 130,
    "nodeHeight": 90,
    "storage": {},
    "tags": [],
    "replicator": null,
    "activeViewer": false,
    "allowCooking": true,
    "bypass": false,
    "cloneImmune": false,
    "render": false,
    "viewer": true,
    "inputConnectors": [
        {}
    ],
    "outputConnectors": [
        {}
    ],
    "par": [
        {
            "name": "projectpresave",
            "val": false,
            "expr": "op('par1')['Exportonpresaving']",
            "enableExpr": null,
            "exportOP": null,
            "exportSource": null,
            "bindExpr": null,
            "bindReferences": [],
            "mode": "EXPRESSION"
        },
        {
            "name": "projectpostsave",
            "val": false,
            "expr": "op('par1')['Exportonpostsaving']",
            "enableExpr": null,
            "exportOP": null,
            "exportSource": null,
            "bindExpr": null,
            "bindReferences": [],
            "mode": "EXPRESSION"
        }
    ],
    "text": [
        "# me - this DAT",
        "# ",
        "# frame - the current frame",
        "# state - True if the timeline is paused",
        "# ",
        "# Make sure the corresponding toggle is enabled in the Execute DAT.",
        "",
        "def onStart():",
        "\treturn",
        "",
        "def onCreate():",
        "\treturn",
        "",
        "def onExit():",
        "\treturn",
        "",
        "def onFrameStart(frame):",
        "\treturn",
        "",
        "def onFrameEnd(frame):",
        "\treturn",
        "",
        "def onPlayStateChange(state):",
        "\treturn",
        "",
        "def onDeviceChange():",
        "\treturn",
        "",
        "def onProjectPreSave():",
        "\top('export_script').run()",
        "\treturn",
        "",
        "def onProjectPostSave():",
        "\top('export_script').run()",
        "\treturn",
        "",
        "\t"
    ]
}

実際のgit差分は例えばこんなふうに見えます。
NetworkExporterという名前のbaseCOMPの位置を動かして、Watchtargetという名前のパラメータを変更したコミット
(View this commit on GitHub)
git diff

できないこと

  • exportした情報のimport
    とりあえずunsupportedですが、やりたいところではありますね・・・。
    ちなみに公式ツールのtoeexpand/toecollapseを使えばできるらしい。
    教えていただきました。

toeexpand/toecollapseについて

これらを使いたい場合はこちらに、git commitをフックしてtoeexpandを叩くスクリプトを作ったのでこれを使うと捗るかもしれません。
https://github.com/nariakiiwatani/toeexpand-git-pre-commit
macのみ対応してますが、toeexpandのパスを書き換えるだけでWindowsでも動くんじゃないかと思うのでそのうちやるかもしれません。

toeexpandも、各オペレーターやそれらの構造をテキストファイルに展開してくれるツールなのでgit管理のために使おうと思えば使えると思うんですが、個人的には、あんまりこのツールで書き出した情報が人間に読みやすいかというとそうでもない気がしてるので、やはりやるなら自前でも作っておきたいかな、と思っています。

その他

  • WatchTarget/にして書き出すと、ルートにrootという名前のbaseCOMPがあるのがわかりました。普通に使ってると目に入りませんがそういう作りになってるんですねえふむふむ。
    これもしかして唯一の「名前とネットワークパスとが一致しないオペレーター」なのでは?
    https://github.com/nariakiiwatani/VersioningTouchDesignerNetwork/blob/4076f1aa7ce43ac28aeb38f548088212cc576b9f/network_structure/.json

  • Pro版のSave Privateで保存されたtoxはどう見えるんですかね・・・?

  • もし興味を持って使ってみたいという方がいらっしゃれば、ベータテスター的な感じで使用感や改善点の感想をもらえると嬉しいです。
    もしインポートできるツールを作るなら有料で公開かなと思っているんですが、なんらかフィードバックくださった方には無償で提供します。(結局作らなかったり、気が変わって無料で公開したらすみません・・・!)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む