20200215のGitに関する記事は9件です。

複数のgitリポジトリを一つのリポジトリにまとめる手順

前提

child1, child2があるとき、parentにまとめたい場合。

手順

  1. parentディレクトリを作り、parentに移動する。mkdir parent; cd parent
  2. child1ディレクトリをparentの中に作る。mkdir child1
  3. git管理したいので.gitkeepを作成する。touch child1/.gitkeep
  4. git add -A child1で、バージョン管理されていないファイルも含めて変更があったchild1以下を管理対象に追加。
  5. リポジトリを追加した旨をコミットする。git commit -m "add: child1"
  6. child1をparentのリモートリポジトリに追加し、fetchする。git remote add child1 ~/child1; git fetch child1
  7. マージする。git merge --allow-unrelated-histories -X subtree=child1 child1/master
  8. 不要な.gitkeepを削除する。 rm ~/parent/child1/.gitkeep
  9. child2について、2以下を同様に行う。

参考url

https://qiita.com/nozomi-kawai/items/5efe8e47e54ebccd0bf8

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

Windows/macOS/Git/Unity Collaborateを併用する

  • Git 2.24
  • Unity 2019.2.19f1

この記事の目的

  • Unityを使った協業について、プログラマ側はGit デザイナ側は Unity Collaborate を利用していくスタイルを実現する為の環境設定について述べる

tl; dr

  • Unity Collaborate を master として扱う
  • テキスト系のアセットは基本的に全部 lf(Unix式) を改行コードとする
  • デザイナ側は特に何もする必要はない
  • Windows 側の プログラマは git config --local core.autocrlf input
  • macOS 側は特に何もする必要はない

背景

 Git はとても便利で優秀なツールなのですが、知らない人にとっては地獄です。学べば解決する話ですが、学習が容易ではない人を雑に否定することもできません。そこで、デザイナには Unity Collaborate を使ってもらうこととしました。

 しかし Unity Collaborate は Git ではなく、それぞれが相互に運用できるように作られていません。そこで、どうすればそれぞれ仲良くできるのか試行錯誤した結果をここに記します。

小技の紹介

.collabignore

 Unity Collaborate で、管理しないファイルを指定する方法です。

 プロジェクトのルートフォルダにのみ存在できることに気をつけてください。ルートフォルダというのは Assets フォルダの直下ではなく Assets フォルダが置いてあるフォルダです。

 この運用モデルの場合、デザイナ側に不必要なもの(そして、ただ存在するだけでUnity Editorの動きが悪くなるもの)をこれで指定することができます。

.gitignore

 Gitで管理しないファイルを指定する方法です。有名すぎるので説明を省略します。

.gitattributes

 Git の側で、どのファイルをテキストとして扱うのかを明示的に設定するファイルです。とりあえずはこう書いておけば間違いないです。

*.cs        text

Windows において、テキスト系のファイルを取得するときに改行コードを自動変換せず、コミット時に cr+lf を lf として解釈させる

git config --local core.autocrlf input

 この指定です。input は、チェックアウトするときはそのまま、コミットする際に改行コードの変換を行う指定を意味します。

 true にすると、チェックアウトするときに lf -> cr+lf を行い、コミットするときに cr+lf を lf としてファイルを格納します。

 false にすると、チェックアウトにもコミットにも一切の変換を行いません。

運用について

  • デザイナは Unity Collaborate のみを使う
    • デザイナごとに、作業するフォルダを明確に分けておくと衝突しないので良い。また、プログラマともフォルダが明確に分かれていると良い。
  • プログラマは Git のみを使う
    • いつも通りの運用です。
  • Unity Collaborate と Git を両方を使い、両方の変更をまとめていく管理者をプログラマ側にひとり用意する
    • この人が頑張ります
    • 運用方針としては Unity Collaborate = Git の master となるように頑張ります。
      • master じゃなくても master 的なものを目指します(便宜的に本文書では master と呼びます)
      • 単純に言うと Unity Collaborate の最新を Restore したときに、それと master の最新が一致する状態を目指します。
      • 同様に Git から最新の master を持ってきたときに、それが最新の Unity Collaborate の状態となることを目指します。

Unity Collaborate と Git をまとめる手順

 手順と言うほどのことではありませんが、書き出すとこうなります

  1. master ブランチにする。
  2. Unity Collaborate 側(デザイナ側)の変更があったら、それを Update してこちらに引っ張ってくる
  3. この Update で得られたものを Git 側に commit する
  4. Git 側で共有したい変更を master に merge する
  5. merge した内容を modified として Unity Collaborate 側へ publish する

 このときに、このまとめ作業を行うマシンが Windows だと(macOS を使っているプログラマが混在していて autocrlf の設定が true だと)master の最新を checkout したときに、改行コードが自動的に変換されてしまい Unity Collaborate の最新と異なってしまうハマりに遭遇し、地獄になるわけです。

結論

  • みんな Git を使えるようになって欲しい
  • Git は色々設定項目があるので、最悪でも Git 側の色々設定を変更することによって無理矢理解決できることがぼちぼちある
  • 歴史的経緯とはいえ、改行コードが異なっているの本当につらい。次の次の世代くらいには解決していて欲しい
  • Unity Collaborate はシンプルですが、それゆえにものすごく強力で便利なものでもあるので Git などの外部管理にこだわらずに採用できるか考えてみると良いかもしれません
  • Unity Collaborate ももっとオプションとか機能とか増やして欲しい…… Cloud Build に連携しなくていいので、もっとローカルなエリアで動いてくれたら嬉しい……
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TIPS: リモートブランチのコミットをローカルブランチに完全同期する

僕のチームではfixupコミットを多用しており、force pushがよく使われます。しかし、force pushを多用しているとレビュー時などにローカルブランチのコミットログとリモートブランチのコミットログが変わってしまいpullだとうまくいかないことが多いです。
こういう時にローカルにあるブランチをリモートブランチと完全に同期させたい、みたいな気持ちになることが多いのですが、それをgit reset --hardを使えばできることを知ったので紹介します。

git reset --hardを使う時HEADとかHEAD~とかをオプションで渡すことが多いと思うのですが、ここでブランチを指定すると、そのブランチのHEADを指定したのと同じ意味になります。

結論から行ってしまうと

git reset --hard 今のブランチと同期させたいリモートブランチ

みたいな書き方でリモートブランチと完全同期させることができます。

例(hogeのbranchを完全同期させる場合)

git fetch
git checkout hoge 
git reset --hard origin/hoge 

参考文献
http://www-creators.com/archives/1097

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

git初心者向け、Please tell me who you are.という記述が出た時の対処法

SnapCrab_NoName_2020-2-15_15-28-34_No-00.png

分かりづらくて申し訳ないのですが、

git commit -m "add hi from hello.html.erb

というコマンドがあるのですが、その下にPlease tell me who you are.という記述が出てしまって次に進めないという人がもしかしたらいるのではないかという風に思ったので、解決法を残しておきます。

エラーの原因

エラーの内容自体や解決方法もすべてPlease tell me who you are.の下にあるっちゃあるんですけどでもやっぱりコマンドの実行に失敗して慌ててエラー文を読まないことってありますよね。

肝心のエラーの原因なのですがgitにあなたのユーザー情報が登録されてないから登録してね。という内容です。

解決法

エラー文をよく読んでみると

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

という記述があると思います。この文を二つともコピーしてコメントの中身の部分("で囲まれている部分)を自分の情報に治してあげます。

そしてそれをコマンドに打ち込むことによってうまくいきます。

参考になれば幸いです。

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

プロジェクト名を後から変更する手順

プロジェクト名を後から変更する手順

Xcodeが一気に置換してくれると嬉しいのですが、手作業が必要なので、手順を以下にメモします。

  1. Xcodeを開き、プロジェクトを選択。File inspectorの名前を新しい名前に変更する。
  2. スキーム名の変更をするため、スキーム編集画面からスキーム名を選択し、新しい名前に書き換える。名前をクリックして待っていると編集できる状態になる。
  3. Xcodeを再起動し、フォルダ名を手順1と同じ要領で変更していく。Locationのパスが正しいか注意する。なお、git mv 旧名称 新名称を実行すると、gitがファイル名変更を認識できるようになる。
  4. ターゲットのBuild Settingのplist指定のパスを書き換える。同様に、Product Bundle Identifierのパスも書き換える。

参考

https://stackoverflow.com/questions/33370175/how-do-i-completely-rename-an-xcode-project-i-e-inclusive-of-folders

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

jupyter lab の extension を install するためには git が必要な場合あり

jupyter lab に関わる環境構築の Tips です。2020年2月のメモです。

前提

Windows10, anaconda (miniconda)

python 3.7.6
jupyterlab 1.2.6
nodejs 13.8.0

conda install -c conda-forge jupyterlab
conda install -c conda-forge nodejs

などで作った環境です。

インストールできない状態

インストラクション通りに node.js をインストールしても、extension のインストールに失敗します。エラーログに、こういう記載がありました。

jupyterlab-debug-xxxxxxxx.log
......
yarn install v1.15.2
[1/5] Validating package.json...
[2/5] Resolving packages...
error Couldn't find the binary git
......

明示されていない前提条件として、コマンドラインで git が使える必要がある場合があるようです。(そもそもなぜ git が入ってないのか、とは聞かないでください)

対策

安直ですが、git も conda で入れてしまいます。

conda install git

jupyter labextension install @jupyter-widgets/jupyterlab-manager k3d

エラー無く機能拡張がインストールできるようになりました。

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

環境変数でgitのプロキシ設定するなら Git Bashとコマンドプロンプトではやり方が違うよ

概要

「Windowsで、コマンドプロンプトとGit Bashを同時に使かもしれない人」かつ「環境変数でgitのプロキシ設定する人」という狭い範囲向けの話。

結論

環境変数でgitのプロキシ設定するなら、

  • コマンドプロンプトは、setで環境変数の設定
  • Git Bashは、exportで環境変数の設定

ということを思い出す・・・もしくは、

一時的にproxyを有効_無効にしてgit cloneする方法 - Qiita

git clone <repository-url> -c http.proxy="http://<proxyserver>:<port>" -c https.proxy="https://<proxyserver>:<port>"

を使おう。

以下、詳細

詳細

コマンドプロンプト、Cmder、バッチファイルでは以下のようにしてました。

> set http_proxy=http://<proxyserver>:<port>
> set https_proxy=https://proxyserver>:<port>
> git clone <repository-url>

普段あまり使わないGit Bashを使ってみたら・・・

$ set http_proxy=http://<proxyserver>:<port>
$ set https_proxy=https://proxyserver>:<port>
$ git clone <repository-url>
Cloning into '<repository>'...
fatal: unable to access '<repository-url>': The requested URL returned error: 403

あら?cloneできない。

「[http経由の git コマンド(push,clone,fetch..)等がなんかうまく動かないときにデバッグする方法2」を試そう。

$ GIT_CURL_VERBOSE=1 git clone <repository-url> 
Cloning into '<repository>'...
* Couldn't find host <repository-host-server> in the _netrc file; using defaults
*   Trying <repository-host-server> ...
...略...
* Connected to <repository-host-server> (<ipaddress>) port 80 (#0)
> GET <repository-url>/info/refs?service=git-upload-pack HTTP/1.1
Host: <repository-host-server>
...略...
< HTTP/1.1 403 Forbidden
...略...
* Connection #0 to host <repository-host-server> left intact
fatal: unable to access '<repository-url>': The requested URL returned error: 403

HTTP/1.1 403 Forbiddenが返ってきてる。

設定したはずの<proxyserver>が全く登場してない。

setが効いてない?

Set an environment variable in git bash - Stack Overflow

You can combine the assignment with the export statement.
export HOME=c

Set an environment variable in git bash - Stack Overflow

(export if I am on Unix, or a simple set on Windows)

あ。Git「Bash」か。

あと、コマンドプロンプトは、"http://<proxyserver>:<port>"のようにダブルクオーテーションで囲むとエラーになるけど、

> set http_proxy="http://<proxyserver>:<port>"
> set https_proxy="https://proxyserver>:<port>"
> git clone <repository-url>
fatal: unable to access '<repository-url>': Unsupported proxy syntax in '<proxyserver>:<port>"'

Git Bashはエラーにならないよ。

$ export http_proxy="http://<proxyserver>:<port>"
$ export https_proxy="https://<proxyserver>:<port>"
$ git clone <repository-url>
Cloning into '<repository>'...
remote: Counting objects: 50, done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 50 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (50/50), done.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

環境変数でgitのプロキシ設定するなら Git Bashとコマンドプロンプトでやり方が違うよ

概要

「Windowsで、コマンドプロンプトとGit Bashを同時に使かもしれない人」かつ「環境変数でgitのプロキシ設定する人」という狭い範囲向けの話。

結論

環境変数でgitのプロキシ設定するなら、

  • コマンドプロンプトは、setで環境変数の設定
  • Git Bashは、exportで環境変数の設定

ということを思い出す・・・もしくは、

一時的にproxyを有効_無効にしてgit cloneする方法 - Qiita

git clone <repository-url> -c http.proxy="http://<proxyserver>:<port>" -c https.proxy="https://<proxyserver>:<port>"

を使おう。

以下、詳細

詳細

コマンドプロンプト、Cmder、バッチファイルでは以下のようにしてました。

> set http_proxy=http://<proxyserver>:<port>
> set https_proxy=https://proxyserver>:<port>
> git clone <repository-url>

普段あまり使わないGit Bashを使ってみたら・・・

$ set http_proxy=http://<proxyserver>:<port>
$ set https_proxy=https://proxyserver>:<port>
$ git clone <repository-url>
Cloning into '<repository>'...
fatal: unable to access '<repository-url>': The requested URL returned error: 403

あら?cloneできない。

「[http経由の git コマンド(push,clone,fetch..)等がなんかうまく動かないときにデバッグする方法2」を試そう。

$ GIT_CURL_VERBOSE=1 git clone <repository-url> 
Cloning into '<repository>'...
* Couldn't find host <repository-host-server> in the _netrc file; using defaults
*   Trying <repository-host-server> ...
...略...
* Connected to <repository-host-server> (<ipaddress>) port 80 (#0)
> GET <repository-url>/info/refs?service=git-upload-pack HTTP/1.1
Host: <repository-host-server>
...略...
< HTTP/1.1 403 Forbidden
...略...
* Connection #0 to host <repository-host-server> left intact
fatal: unable to access '<repository-url>': The requested URL returned error: 403

HTTP/1.1 403 Forbiddenが返ってきてる。

設定したはずの<proxyserver>が全く登場してない。

setが効いてない?

Set an environment variable in git bash - Stack Overflow

You can combine the assignment with the export statement.
export HOME=c

Set an environment variable in git bash - Stack Overflow

(export if I am on Unix, or a simple set on Windows)

あ。Git「Bash」か。

あと、コマンドプロンプトは、"http://<proxyserver>:<port>"のようにダブルクオーテーションで囲むとエラーになるけど、

> set http_proxy="http://<proxyserver>:<port>"
> set https_proxy="https://proxyserver>:<port>"
> git clone <repository-url>
fatal: unable to access '<repository-url>': Unsupported proxy syntax in '<proxyserver>:<port>"'

Git Bashはエラーにならないよ。

$ export http_proxy="http://<proxyserver>:<port>"
$ export https_proxy="https://<proxyserver>:<port>"
$ git clone <repository-url>
Cloning into '<repository>'...
remote: Counting objects: 50, done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 50 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (50/50), done.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git のコミットプレフィックス入力をサポートする Vim プラグイン:vim-git-commit-prefix を作った

はじめに

Vim プラグインの勉強を細々と続けていて、そろそろ簡単なプラグインを作ってみたいなと思って作ったプラグインを紹介します。

vim-git-commit-prefix とは

gotchane/vim-git-commit-prefix は、git でコミットメッセージを編集するときに、プレフィックスの候補を表示してくれるプラグインです。

git のデフォルトエディタを vim にした状態で git commit をすると、編集画面の最初にプレフィックスの候補を表示してくれます。

2020/02/16 追記:

以下 PR を送っていただきました!より便利になったと思います。感謝です!!

使い方

プラグインマネージャーでプラグインをインストールします。

call dein#add('gotchane/vim-git-commit-prefix')

そして、git のデフォルトエディタを vim にすればOKです。

$ git config --global core.editor vim

git commit をすると、エディタ起動と同時にコミットプレフィックスの補完が表示されると思います。上下で候補を選択してください。

2020/02/16 追記:

Vim 上で git を操作するプラグインで利用される方は、それぞれのプラグインで git commit 相当の操作をすれば利用できます。

プレフィックスについて

angular.js/DEVELOPERS.md を踏襲し、以下が選択できます。

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance
  • test: Adding missing or correcting existing tests
  • chore: Changes to the build process or auxiliary tools and libraries such as documentation generation

作った背景

社内でコミットプレフィックスをつけるのが流行っていたり、コミットプレフィックスの有用性に関する記事を読んだりしていて、コミットプレフィックスつける運用やってみたいなと思っていました。しかしいざやろうとすると気分で付けたり付けなかったりして、続けるのは難しいなと感じていました。

そこで、コミットメッセージを編集するときに強制的にプレフィックスを補完してくれるものがないかを探していました。cz-cli というプレフィックス補完をサポートするツールもあるようなのですが、僕はコミットメッセージ編集を vim でやっていたということもあり、vim プラグインの勉強のお題にもなるし良いなと思って、vim プラグインを作ってみることにしました。

実際自分で使い始めてからは、必ずプレフィックスをつける意識がついたので便利に使っています。

おわりに

初めて作ったプラグインなので荒い作りだと思いますが、よかったら使ってみてください。Issue、PR お待ちしてます!

参考

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