- 投稿日:2021-01-24T23:55:16+09:00
Docker×Git×VSCodeを使ってElixirの開発を丁寧に始める
環境
- Windows 10 Pro
- Docker for Windows
- Docker Engin (20.10.2)
- docker-compose (1.27.4)
- Git for Windows (2.30.0.windows.2)
- Visual Studio Code (1.52.1)
- 拡張機能
- Docker
- Japanese Language Pack for Visual Studio Code
- Remote - Containers
- ElixirLS
それぞれのインストールについては、Docker×Git×VSCodeの環境構築は多分これが一番やさしい説明だと思いますを参照。
やりたいことと注意点
やりたいこと
- DockerとVSCodeでElixirの開発環境を作る
- mixでElixirプロジェクトを作って動作確認する
- GitHubと連携してバージョン管理を行う
本記事では1,2,3の順番で説明。
注意点
本記事を読む際は以下の点に注意されたし。
- 環境構築の手順とそのハマりポイントについて記載しているので、DockerやElixirなどについての詳しい記載を避けている
- 画面のキャプチャを張り付けて説明している。アプリや拡張機能の仕様変更により記事掲載時と画面の内容が異なることがある
- 本記事の手順は上記環境欄で記載した環境を用意していることを前提とする
- 記事が長い
STEP1 DockerとVSCodeでElixirの開発環境を作る
1.VSCodeを起動して[ファイル]->[フォルダーを開く]を押下
2. 任意のフォルダを作成して、フォルダーの選択を押下(今回は「elixir_intro」のフォルダを作成)
3. エクスプローラーのところで右クリック->新しいファイルをクリック
4.新しく作成したファイルの名前を「Dockerfile」にして、以下の内容を記述※ファイル名を「DockerFile」(fを大文字)にするとdocker-composeコマンドがエラーになるので注意(後述のハマりポイントを参照)
DockerfileFROM elixir:1.11.1 RUN mix local.hex --force && \ mix archive.install hex phx_new 1.4.3 --force && \ mix local.rebar --force WORKDIR /app
5. 再度エクスプローラーのところで右クリック->新しいファイルをクリック
6.新しく作成したファイルの名前を「docker-compose.yml」にして、以下の内容を記述
docker-compose.ymlversion: '3.2' services: elixir: build: . volumes: - .:/app
7. VSCodeの左下のアイコンを選択(Remote - Containersの拡張機能が必要)
8. 「Remote - Containers:Reopen in Container」を選択
9. 「From 'docker-compose.yml'」を選択
10. 左下に「Dev Container:Existing Docker Compose(...」と表示されたら成功
11. VSCodeの拡張機能を有効化する。「Ctrl」+「Shift」+「X」キーを押下して拡張機能を表示して、「Dev Container:Existin1」を押下
※docker-compose(Docker)で接続したリモートコンテナ上でVSCodeが立ち上がっているので、拡張機能が無効化されている。ハマりポイント docker-composeコマンドがエラーになる(原因:Dockerfileのファイル名)
Dockerfileのファイル名を「DockerFile」(fが大文字)にした場合、以下のエラーが発生する。
原因は「~Cannot locate specified Dockerfile: Dockerfile'~」と記載されているように、
docker-compose実行時にCPythonが実行され、内部コードの辞書に存在する「Dockerfile」の文字列に合致しないため。ファイル名を「Dockerfile」に変更すると解消する。
--------------------------中略-------------------------- [2021-01-24T00:14:09.868Z] [PID 18988] File "compose\service.py", line 346, in ensure_image_exists File "compose\service.py", line 1147, in build compose.service.BuildError: (<Service: elixir>, {'message': 'Cannot locate speci fied Dockerfile: Dockerfile'}) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "docker-compose", line 3, in <module> File "compose\cli\main.py", line 78, in main TypeError: can only concatenate str (not "dict") to str [7012] Failed to execute script docker-composeSTEP2 mixでElixirプロジェクトを作って動作確認する
STEP1でコンテナにリモート接続し、VSCodeのターミナルで以下のコマンドを実行
root@:/workspace# mix new . --app elixir_intro #カレントディレクトリに「elixir_intro」のアプリ名でPJを作成する実行したら以下のディレクトリが構成される
. ├── .devcontainer │ ├── devcontainer.json │ └── docker-compose.yml ├── .elixir_ls │ └── build ├── lib │ └── elixir_intro.ex ├── test │ ├── elixir_intro_test.exs │ └── test_helper.exs ├── .formatter.exs ├── .gitignore ├── docker-compose.yml ├── Dockerfile ├── mix.exs └── README.md動作確認では、以下のElixirファイルをコンパイル・実行する。(プロジェクト作成時から訂正しているのでコピペすること)
lib/elixir_intro.exdefmodule ElixirIntro do @moduledoc """ Documentation for `ElixirIntro`. """ @doc """ Hello world. ## Examples iex> ElixirIntro.hello() :world """ def main([]) do IO.puts "Hello World" end end動作確認① iexからプログラムを実行する場合
- VSCodeのターミナルで以下のコマンドを実行して、iexを起動
root@:/workspace# iex -S mix # -Sオプションでインタラクションモード実行前にmixを実行する Erlang/OTP 23 [erts-11.1.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] Compiling 1 file (.ex) # mixを実行したためにコンパイル実行 Generated elixir_intro app Interactive Elixir (1.11.1) - press Ctrl+C to exit (type h() ENTER for help) iex(1)>
2. iexで以下を実行して動作確認iex(1)> ElixirIntro.main([]) Hello World :ok動作確認② コマンドラインからmixを実行して動作確認
- VSCodeのターミナルで以下のコマンドを実行して、コンパイルを実行
root@:/workspace# mix compile Compiling 1 file (.ex) # -Sオプションでインタラクションモード実行前にmixを実行する Generated elixir_intro app
2. 続いてVSCodeのターミナルで以下のコマンドを実行して動作確認root@:/workspace# mix run -e "ElixirIntro.main([])" Hello World動作確認③ 実行可能ファイルを作成・実行して動作確認
- VSCodeのターミナルで以下のコマンドを実行して、実行可能ファイルを作成
実行後、ファイル名「elixir_intro」のファイルが作成される。
root@:/workspace# mix escript.build Compiling 1 file (.ex) Generated elixir_intro app Generated escript elixir_intro with MIX_ENV=dev
2. 実行可能ファイルを実行して動作確認root@:/workspace# ./elixir_intro Hello WorldSTEP3 GitHubと連携してバージョン管理を行う
前準備 Gitの初期設定
既に初期設定している場合は読み飛ばしてOK
※前提として、GitHubアカウントを作成していること
- Git Bashを実行してコマンドラインを起動(Git BashはWindows検索ボックスなどで検索して実行)
- ユーザー名の登録(GitHubアカウントのユーザー名)
$ git config --global user.name 'username'
3. アドレスの登録(GitHubアカウントのアドレス)$ git config --global user.email 'username@example.com'
4. Gitのエディタとマージツールの設定をVSCodeに指定$ git config --global core.editor 'code --wait' $ git config --global merge.tool 'code --wait "$MERGED"'
5. pushの方式を指定(追跡ブランチに対してpush)$ git config --global push.default simpleローカルリポジトリの作成と変更内容のコミット
- ローカルリポジトリを初期化する。VSCodeで「Ctrl」+「Shift」+「G」キーを押下して、ソース管理画面のInitialize Repositoryを押下
2. 変更内容を全てステージングする。画像の「+」マークを押下
3. 変更内容を全てコミットする。①コミットメッセージを記載し、②レ点を押下リモートリポジトリの作成
- GitHub (https://github.com/) にアクセス、ログインして画面左上のNewを押下
2. 「Repository name」を入力し、Create repositoryを押下※今回はリポジトリ名を「elixir_intro」とし、Publicリポジトリにした(誰でもアクセス可能)
※READMEファイルや.gitignoreファイルはmixでプロジェクトを作成した時に作成されたので今回はチェックを外した。ライセンスは関係ないのでチェックを外した
3. 画面に表示されたHTTPSのURLをコピーしておく(後にpushするときに必要)ローカルからリモートリポジトリへpushする
- リモートリポジトリを追加する。VSCodeで「Ctrl」+「Shift」+「G」キーを押下して、ソース管理画面の横三点リーダからAdd Remoteを押下
2. テキストボックスにリモートリポジトリのHTTPS URLを入力
3. テキストボックスにリモート名を入力(今回は「origin」と入力)
6. 「上流ブランチが無いので、このブランチをpublishするか?」と聞いてくるのでOKを押下
7. GitHubでリモートリポジトリを確認すると、反映されている以上で環境の構築は完了。
謝辞
今回は様々な記事を参考にさせて頂きました。
この場をお借りしてお礼申し上げます。
- Docker ComposeでElixir/Phoenixの開発環境を構築する
- Elixir のはじめ方
- 【Git】Visual Studio Code × GitHub の連携
- docker-composeを実行しようとしたら、エラー「Cannot locate specified Dockerfile: Dockerfile」
Existing Docker Compose (Extend) ↩
- 投稿日:2021-01-24T23:39:27+09:00
git add -Aが効かない... [超初心者]
要約
git add -Aでうまくいかなかったことが
git add <リポジトリ名>にするとうまくいったという話
つまりかけた部分
rails tutorialをやっていて、gitはgit add -Aをすればcommitできるでしょ、と漠然と思っていた
git add -A error: 'リポジトリ名/' does not have a commit checked out fatal: adding files failed??
何故かaddできないgit addの仕様
→https://note.nkmk.me/git-add-u-a-period/
git addのオプションはこちらのリンクがわかりやすい
→https://qiita.com/stivan622/items/a5d0d651e5b59be00f0c#ファイルをステージングに追加 git add <ファイル名> #複数ファイルを追加 git add <ファイル名> <ファイル名> <ファイル名> <ファイル名> #すべてのファイルを追加 git add .結果
git add <ファイル名>ここのファイル名をリポジトリ名として実行するとうまく行った
依存関係の問題もあるかもしれないけど今はわからない
- 投稿日:2021-01-24T21:59:54+09:00
きっとgit使えないとbad
はじめに
私は、プログラミングを始めた当初から、GitHub Desktopを使っていました。ですが、現場ではターミナルで操作することの方が多いと思うので、封印します。ターミナルで操作できるように少しずつコマンドを覚えていこうと思います。
今回は、いちばんよく使う、GitHub Desktopでいうところの、コミットからプッシュまでを紹介します。
コミットまで
% git add ファイル名
- ファイル名はパスで指定する。
※app/views…みたいな感じ。- 複数のファイルを登録する場合は、ファイル名を半角スペースで開ける。
※同じフォルダ内なら、,
で区切る。- 全ファイルを登録する場合は、
% git add -A
% git commit -"コミットメッセージ"
ここまでをGitHub Desktopでは、コミットメッセージを書いて、ワンクリックだったなぁ…
add
の概念が無かった…% git statusで状態を確認することができる。
リモートリポジトリにプッシュ
% git pushこれも、GitHub Desktopでは、ワンクリックだったなぁ。
最後に
調べていると知らない概念がたくさんあって、もっと勉強しないといけないと思わされました。
- 投稿日:2021-01-24T21:40:38+09:00
【Git】ローカルブランチの変更を元に戻す
$ git checkout .これで変更したものを元に戻すことができる。
- 投稿日:2021-01-24T21:07:57+09:00
ターミナルをカスタマイズする方法
はじめに
先日iTerm2を導入しました。
せっかくなのでこのタイミングでカスタマイズしてみたところ、結構いい感じになったのでその方法をシェアします。
iTerm2をインストールする
下記リンク先からダウンロードできます。
https://iterm2.comまずは見た目を変える
こちらを参考にしました。それでは1つずつ見ていきます。
https://gist.github.com/kevin-smets/8568070oh-my-zshをインストールする
oh-my-zshは、zsh用の設定フレームワークです。
公式はこちらから→https://github.com/ohmyzsh/ohmyzsh下記コマンドでインストールします。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"Powerlevel 10kを使用する
こちらは表示をカスタマイズするプラグインです。
公式はこちらから→https://github.com/romkatv/powerlevel10k下記コマンドでクローンします。
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10kクローンしたら、zshの個人設定ファイルである.zshrcを開きます。
open ~/.zshrc先ほどクローンしたPowerlevel 10kが使えるように書き換えます。
ZSH_THEME="powerlevel10k/powerlevel10k"フォントをインストールする
このままだと表示が文字化けしていると思います。
解消するために下記リンク先からSource Code Pro for Powerlineというフォントをダウンロードします。
https://github.com/powerline/fonts/blob/master/SourceCodePro/Source%20Code%20Pro%20for%20Powerline.otfダウンロードが終わったら、下記リンク先にも記載されている通りインストールを進めます。
https://github.com/powerline/fontsまずはクローンします。
git clone https://github.com/powerline/fonts.git --depth=1インストールします。
cd fonts./install.shcd ..rm -rf fontsiTerm2で設定する
iTerm2のPreferencesを開き、Profiles内のTextタブを開きます。
Fontを先ほどインストールしたSource Code Pro for Powerlineに変更します。
これで文字化けが直るはずです。
これは好みですが、Colorsタブ内のColor Presetsで色をSolarized Darkを選びました。
以上で見た目のセットアップは終了です。コマンドの予測補完を表示する
zsh-autosuggestionsというプラグインを入れてコマンドの予測補完を表示できるようにしました。
https://github.com/zsh-users/zsh-autosuggestionsまずはクローンする。
git clone [https://github.com/zsh-users/zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) $ZSH_CUSTOM/plugins/zsh-autosuggestions次に、.zshrcにzsh-autosuggestionsを追記します。
私の場合、以下のようになりました。plugins=( git zsh-autosuggestions )最後に設定を更新しておきます。
source ~/.zshrcエイリアスを設定する
まずは毎回git push等のようにgit 〜と入力しなくてもいいようにエイリアスを設定します。
.zprofileを開き、下記を追記します。alias g='git'エイリアスを設定することで、下記のようにg 〜と省略することができるようになります。
g push次に、よく使うgitコマンドについてもエイリアスを設定しておきます。
こちらについては.gitconfigに記載していきます。[alias] co = checkout ps = push st = status br = branch例えば、g pushと入力しなくても下記のようにさらに省略することができるようになります。
g ps最後に
参考までに.gitconfigを公開しましたので、コピーしてお使いください。
https://github.com/n199603/dotfiles-public以上、ターミナルをカスタマイズする方法でした。見ていただきありがとうございました。
- 投稿日:2021-01-24T19:32:33+09:00
会社用のgithubを作成した話
はじめに
実際の現場ってgithubのアカウントが用意されており、入社したらそこに招待してもらうみたいな感じがありますよね。
先日会社用のgithubのアカウントを作成しました。
今までは個人開発で個人のgithubアカウントは持っていたのですが
会社用のアカウントはどう作成するのか、どのプランがいいのかなどネットにも賛否両論だったのでここでまとめます!ターゲット層
- これから会社を作りgithubのアカウントを作成したい
- 小さいコミュニティなどで使うアカウントが欲しい などなど
結論
いきなり結論からいうと
1. 代表者の個人のアカウントを作成
2. 個人のアカウントの中でorganizationを作成
3. プランを決定する
4. リポジトリを作成
5. メンバーを招待していく
といった流れになります!!会社によって色々な方法をとっていますが、今回はこちらの方法で説明していきます
個人用のアカウントを作成
こちらは個人用のアカウントを持っていれば一度行っていると思いますが一緒に行っていきます!
https://github.com/
こちらのページにいきましょう!まずはsignUpでアカウントを新規に作成します!
自分が代表の場合は自分の情報で、
代表以外が管理する場合もここは代表者の情報で個人アカウントを作成する方がいいと思います!!ひとまずメール認証などありますが
名前、メールアドレス、パスワードを入れてアカウントを作成しましょう!個人のアカウントでorganizationを作成
organizationは組織という意味です!
ここからYour organizationsをクリックです!次にnew organizationsをクリック
次にプランを決めます!
3プランありますが、organizationsを作るのであれば
TeamかEnterpriseを選択しましょう!!Enterpriceは会社なのでこっちかなと思った方。
プランはいつでもアップデート可能なので、まずはTeamプランをお勧めします!Teamプランではメンバーを一人招待するごとに4$ってイメージです。
小規模なチーム開発ならこちらで十分だと思います。あとは組織のorganizationsの名前を決めて、カード情報を入れれば作成は完了です!
作成したものはこちらで切り替えられます!またメニューからYour organizationsをクリックすると
こちらのsettingsから色々設定ができます!!ちなみにBilling & plansなどで月々の支払いや領収書なども見れるようになっています!!
メンバーを招待する
organizationsの方でpeopleを開きましょう
そこのinvite memberで招待したい人のユーザー名、フルネーム、あるいはメールアドレスを入力して招待を送ります!
詳しくはこちらにhttps://docs.github.com/ja/github/setting-up-and-managing-organizations-and-teams/inviting-users-to-join-your-organizationこれで完了です!!!
お疲れ様でした!!
- 投稿日:2021-01-24T18:23:29+09:00
macOS / Windows の Git 用に GnuPG (GPG) を準備する
macOS や Windows の Git でタグやコミットに署名できるように GnuPG (The GNU Privacy Guard) をインストールする手順や注意事項です。
実際に署名を付ける手順は以下などを参照ください。
macOS
前提
- Homebrew が使えること
- Git が使えること
インストール
GnpPG のインストール
brew install gnupg
pinentry-mac のインストール
GnuPG をインストールしただけでは、Git の CLI を直接使わずにコミットするときなど、秘密鍵を使うときのパスフレーズの入力に難があるので 1、 pinentry-mac を使うように構成します。
brew install pinentry-mac
インストール後に表示される以下のメッセージの通りに
~/.gnupg/gpg-agent.conf
を作成します。==> Caveats You can now set this as your pinentry program like ~/.gnupg/gpg-agent.conf pinentry-program /usr/local/bin/pinentry-mac以下のコマンドをそのまま実行すれば良いでしょう。
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.confこれで、秘密鍵を使うときにパスフレーズの入力でウィンドウが表示されるようになります。
期待したとおりに動かないとき
gpg-agent
を停止してから試してみると良いかも。gpgconf --kill gpg-agent
Windows
前提
- Git for Windows が使えること
GnuPG のインストールについて
Git for Windows に GnuPG が付いているため、改めてインストールする必要はありません。 2 3
gpg
コマンドの実行についてGPG キーペアの作成など、
gpg
コマンドは Git Bash 上で使います。通常の状態では
gpg
コマンドは PowerShell やコマンドプロンプトから使えないので、普段これらのシェルからgit
コマンドを使っている場合は注意が必要です。 4
MacVim by macvim-dev で tpope/vim-fugitive: fugitive.vim: A Git wrapper so awesome, it should be illegal の
:Gcommit
を使うときにパスフレーズを入力出来ないなど。 ↩
choco install gnupg
などとして GnuPG をインストールし、Git がこれを使うようにgit config
で設定することもできるとは思いますが、.gitconfig
のポータビリティがなくなるので私は諦めました。 ↩Git for Windows 同梱版や Windows 以外の GnuPG で使用される
~/.gnupg
ディレクトリが、Windows 用の GnuPG では%APPDATA%\gnupg
になるなどの違いがあります。コマンドオプションや環境変数を設定して同じディレクトリを参照するようにもできますが、同じディレクトリを共用するとファイルのロック操作に不具合を生じるようです。 ↩環境変数
PATH
を適切に設定すれば使えるようですが。 ↩
- 投稿日:2021-01-24T16:38:07+09:00
[iOS] git pushでLintチェックを行う(Git Hooks + SwiftLint)
こんにちは。都内でiOSエンジニアをしている @zrn-ns です。
弊社のプロジェクトではSwiftLintを利用しており、最低限のコーディング規約についてはSwiftLintでチェックする事ができるようになっています。
SwiftLintはビルドフェーズに含めることも想定されており、公式のガイドに従うだけでビルド時にLintチェックを行い、規約に沿った記述を徹底させることができます。
しかし今回諸事情があり、ビルドフェーズではなく、Gitでリモートリポジトリにpushする直前でLintチェックを行うようにしてみました。
なぜビルドフェーズではなく、Push時にチェックするのか
ビルドフェーズで実行する方式だとビルド時に多少のオーバーヘッドが発生してしまいます(差分チェックを行ってくれるようなので、ほぼ気にならないレベルですが)。
また弊社社内ではXcode派とAppCode派が存在します。AppCodeではSwiftLintのプラグインが存在するため、Lintチェックをビルドフェーズに含める方式だと、2重でLintチェックが行われてしまうことになります。これらの問題を解消するため、ビルドフェーズでLintチェックを行うのをやめ、リモートリポジトリにコードをpushするタイミングでLintチェックを行うようにしてみました。
どうやってPush時に任意のスクリプトを実行するのか
Gitには、各アクション(commit, push, merge等)の実行の前後に任意のスクリプトを実行するためのGit Hooksという仕組みがあります。
Git Hooksでは、commitやpush, mergeの前後のタイミングで、各Gitリポジトリの
.git/hooks/
ディレクトリ下に配置したスクリプトが自動的に実行されます。
例えば、pushの直前でスクリプトを実行したい場合、.git/hooks/pre-push
というスクリプトが存在すれば、それが自動的に呼び出されます。Git Hooksを利用して、push時にSwiftLintを実行する
今回はGit Hooksの設定を全メンバー間で共有できるようにし、全メンバーがpush前にLintチェックを行うことを強制できるようにします。
スクリプトの作成
.git/
ディレクトリ配下はgitで管理されない(コミットできない)ため、.git/hooks/pre-push
にスクリプトを記述するとメンバー間で設定を共有することができません。そこで、git管理下にGit Hooks用のスクリプトを入れておくための専用のディレクトリを作成し、そこに配置したpre-pushスクリプトを参照するようにgitの設定を変更します。
cd {プロジェクトディレクトリ} # git hooksを入れるためのディレクトリとスクリプトを作成 mkdir .githooks touch .githooks/pre-push # スクリプトに実行権限を与える chmod 755 .githooks/pre-push場合によってはLintチェックを無視してpushしたい場合もあるかと思うので、Lintチェックでエラーがあった場合、pushを続行するか選択できるようにします。
pre-pushのスクリプトの中身は下記のようにします。(※swiftlintのバイナリへのパスは適宜書き換えてください)
.git/hooks/pre-push#!/bin/bash set -eu cd `dirname $0` echo -n 'Linting... ' lint_result=$(swiftlint --reporter emoji --quiet --path ../ --config ../.swiftlint.yml) if [ -n "$lint_result" ]; then # Lintで警告が見つかった場合、push操作を続けるかユーザに判断させる echo 'Some issues found.' echo '=====================================' echo "$lint_result" | sed -e "s/^/>> /" echo '=====================================' echo '' echo -n 'Push anyway?[y/N]: ' exec < /dev/tty read YN if [ "$YN" = "y" ]; then echo 'Ok. continue.' else echo 'Push aborted.'; exit 1; fi else echo 'No issues found!' fi exit 0最後に、Git Hooksの読み込み先ディレクトリを変更します。
この設定は各自の環境で実行する必要があるので、環境構築手順書に追加するのが良いかと思います。# Git Hooksのディレクトリを.githooksディレクトリに変更 git config --local core.hooksPath .githooks/動作確認
実際に動作させてみた結果は下記のような感じになります。
規約違反なし
% git push origin HEAD Linting... No issues found! Enumerating objects: 33, done. Counting objects: 100% (33/33), done. Delta compression using up to 8 threads Compressing objects: 100% (27/27), done. Writing objects: 100% (33/33), 8.73 KiB | 2.18 MiB/s, done. Total 33 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:zrn-ns/swiftlint_on_pre_push.git * [new branch] HEAD -> main %規約違反あり -> push続行
% git push origin HEAD Linting... Some issues found. ===================================== >> /path/to/project/AppDelegate.swift >> ⚠️ Line 36: Files should have a single trailing newline. >> ⚠️ Line 34: Limit vertical whitespace to a single empty line. Currently 2. >> /path/to/project/SwiftLintOnPrePush/SceneDelegate.swift >> ⚠️ Line 52: Files should have a single trailing newline. >> ⚠️ Line 50: Limit vertical whitespace to a single empty line. Currently 2. ===================================== Push anyway?[y/N]: y Ok. continue. Enumerating objects: 33, done. Counting objects: 100% (33/33), done. Delta compression using up to 8 threads Compressing objects: 100% (27/27), done. Writing objects: 100% (33/33), 8.73 KiB | 2.18 MiB/s, done. Total 33 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:zrn-ns/swiftlint_on_pre_push.git * [new branch] HEAD -> main %規約違反あり -> push中止
% git push origin HEAD Linting... Some issues found. ===================================== >> /path/to/project/AppDelegate.swift >> ⚠️ Line 36: Files should have a single trailing newline. >> ⚠️ Line 34: Limit vertical whitespace to a single empty line. Currently 2. >> /path/to/project/SwiftLintOnPrePush/SceneDelegate.swift >> ⚠️ Line 52: Files should have a single trailing newline. >> ⚠️ Line 50: Limit vertical whitespace to a single empty line. Currently 2. ===================================== Push anyway?[y/N]: n Push aborted. error: failed to push some refs to 'git@github.com:zrn-ns/swiftlint_on_pre_push.git' %サンプルプロジェクト
サンプルプロジェクトはこちらにアップしました。
FIXME
今回の手法では、Git Hooksのディレクトリをgit管理下に置くことで、全メンバーがスクリプトを共有する方法をとっています。
この方法は、スクリプトに修正が入った際にも環境間の同期が取れて便利な半面、各メンバーが独自のGit Hooksスクリプトを配置できなくなってしまいます。
(masterへの直pushを防止したりするためにもGit Hooksは便利に使えるので、個人でスクリプトを配置したい場面は多いと思います)何か良いアイディアがあれば教えていただけると幸いです?
まとめ
push前にSwiftLintのチェックを行う方法を解説しました。
この方法を使えば、各ビルドごとにLintチェックのオーバーヘッドがかかることを防げますし、PullRequestの作成前に問題に気づくことができるので、PullRequest作成後にコードを微調整するコストをかなり減らせるはずです。
ただし、新規メンバーが参入した場合には、ビルドごとにLintチェックを掛けてあげたほうが定着は早そうなので、その際はビルドフェーズに追加する方法でLintチェックを行ったほうが良いのかなと思います。
謝辞
下記のサイトを参考にさせていただきました。
- 投稿日:2021-01-24T16:38:07+09:00
GitHooksを利用し、リモートリポジトリにPushするときにSwiftLintを実行する
こんにちは。都内でiOSエンジニアをしている @zrn-ns です。
弊社のプロジェクトではSwiftLintを利用しており、最低限のコーディング規約についてはSwiftLintでチェックする事ができるようになっています。
SwiftLintはビルドフェーズに含めることも想定されており、公式のガイドに従うだけでビルド時にLintチェックを行い、規約に沿った記述を徹底させることができます。
しかし今回諸事情があり、ビルドフェーズではなく、Gitでリモートリポジトリにpushする直前でLintチェックを行うようにしてみました。
なぜビルドフェーズではなく、Push時にチェックするのか
ビルドフェーズで実行する方式だとビルド時に多少のオーバーヘッドが発生してしまいます(差分チェックを行ってくれるようなので、ほぼ気にならないレベルですが)。
また弊社社内ではXcode派とAppCode派が存在します。AppCodeではSwiftLintのプラグインが存在するため、Lintチェックをビルドフェーズに含める方式だと、2重でLintチェックが行われてしまうことになります。これらの問題を解消するため、ビルドフェーズでLintチェックを行うのをやめ、リモートリポジトリにコードをpushするタイミングでLintチェックを行うようにしてみました。
どうやってPush時に任意のスクリプトを実行するのか
Gitには、各アクション(commit, push, merge等)の実行の前後に任意のスクリプトを実行するためのGit Hooksという仕組みがあります。
Git Hooksでは、commitやpush, mergeの前後のタイミングで、各Gitリポジトリの
.git/hooks/
ディレクトリ下に配置したスクリプトが自動的に実行されます。
例えば、pushの直前でスクリプトを実行したい場合、.git/hooks/pre-push
というスクリプトが存在すれば、それが自動的に呼び出されます。Git Hooksを利用して、push時にSwiftLintを実行する
今回はGit Hooksの設定を全メンバー間で共有できるようにし、全メンバーがpush前にLintチェックを行うことを強制できるようにします。
スクリプトの作成
.git/
ディレクトリ配下はgitで管理されない(コミットできない)ため、.git/hooks/pre-push
にスクリプトを記述するとメンバー間で設定を共有することができません。そこで、git管理下にGit Hooks用のスクリプトを入れておくための専用のディレクトリを作成し、そこに配置したpre-pushスクリプトを参照するようにgitの設定を変更します。
cd {プロジェクトディレクトリ} # git hooksを入れるためのディレクトリとスクリプトを作成 mkdir .githooks touch .githooks/pre-push # スクリプトに実行権限を与える chmod 755 .githooks/pre-push場合によってはLintチェックを無視してpushしたい場合もあるかと思うので、Lintチェックでエラーがあった場合、pushを続行するか選択できるようにします。
pre-pushのスクリプトの中身は下記のようにします。(※swiftlintのバイナリへのパスは適宜書き換えてください)
.git/hooks/pre-push#!/bin/bash set -eu cd `dirname $0` echo -n 'Linting... ' lint_result=$(swiftlint --reporter emoji --quiet --path ../ --config ../.swiftlint.yml) if [ -n "$lint_result" ]; then # Lintで警告が見つかった場合、push操作を続けるかユーザに判断させる echo 'Some issues found.' echo '=====================================' echo "$lint_result" | sed -e "s/^/>> /" echo '=====================================' echo '' echo -n 'Push anyway?[y/N]: ' exec < /dev/tty read YN if [ "$YN" = "y" ]; then echo 'Ok. continue.' else echo 'Push aborted.'; exit 1; fi else echo 'No issues found!' fi exit 0最後に、Git Hooksの読み込み先ディレクトリを変更します。
この設定は各自の環境で実行する必要があるので、環境構築手順書に追加するのが良いかと思います。# Git Hooksのディレクトリを.githooksディレクトリに変更 git config --local core.hooksPath .githooks/動作確認
実際に動作させてみた結果は下記のような感じになります。
規約違反なし
% git push origin HEAD Linting... No issues found! Enumerating objects: 33, done. Counting objects: 100% (33/33), done. Delta compression using up to 8 threads Compressing objects: 100% (27/27), done. Writing objects: 100% (33/33), 8.73 KiB | 2.18 MiB/s, done. Total 33 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:zrn-ns/swiftlint_on_pre_push.git * [new branch] HEAD -> main %規約違反あり -> push続行
% git push origin HEAD Linting... Some issues found. ===================================== >> /path/to/project/AppDelegate.swift >> ⚠️ Line 36: Files should have a single trailing newline. >> ⚠️ Line 34: Limit vertical whitespace to a single empty line. Currently 2. >> /path/to/project/SwiftLintOnPrePush/SceneDelegate.swift >> ⚠️ Line 52: Files should have a single trailing newline. >> ⚠️ Line 50: Limit vertical whitespace to a single empty line. Currently 2. ===================================== Push anyway?[y/N]: y Ok. continue. Enumerating objects: 33, done. Counting objects: 100% (33/33), done. Delta compression using up to 8 threads Compressing objects: 100% (27/27), done. Writing objects: 100% (33/33), 8.73 KiB | 2.18 MiB/s, done. Total 33 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:zrn-ns/swiftlint_on_pre_push.git * [new branch] HEAD -> main %規約違反あり -> push中止
% git push origin HEAD Linting... Some issues found. ===================================== >> /path/to/project/AppDelegate.swift >> ⚠️ Line 36: Files should have a single trailing newline. >> ⚠️ Line 34: Limit vertical whitespace to a single empty line. Currently 2. >> /path/to/project/SwiftLintOnPrePush/SceneDelegate.swift >> ⚠️ Line 52: Files should have a single trailing newline. >> ⚠️ Line 50: Limit vertical whitespace to a single empty line. Currently 2. ===================================== Push anyway?[y/N]: n Push aborted. error: failed to push some refs to 'git@github.com:zrn-ns/swiftlint_on_pre_push.git' %サンプルプロジェクト
サンプルプロジェクトはこちらにアップしました。
FIXME
今回の手法では、Git Hooksのディレクトリをgit管理下に置くことで、全メンバーがスクリプトを共有する方法をとっています。
この方法は、スクリプトに修正が入った際にも環境間の同期が取れて便利な半面、各メンバーが独自のGit Hooksスクリプトを配置できなくなってしまいます。
(masterへの直pushを防止したりするためにもGit Hooksは便利に使えるので、個人でスクリプトを配置したい場面は多いと思います)何か良いアイディアがあれば教えていただけると幸いです?
まとめ
push前にSwiftLintのチェックを行う方法を解説しました。
この方法を使えば、各ビルドごとにLintチェックのオーバーヘッドがかかることを防げますし、PullRequestの作成前に問題に気づくことができるので、PullRequest作成後にコードを微調整するコストをかなり減らせるはずです。
ただし、新規メンバーが参入した場合には、ビルドごとにLintチェックを掛けてあげたほうが定着は早そうなので、その際はビルドフェーズに追加する方法でLintチェックを行ったほうが良いのかなと思います。
謝辞
下記のサイトを参考にさせていただきました。
- 投稿日:2021-01-24T15:14:13+09:00
git add *コマンドでは.gitignoreで指定したファイルを無視できないため、不整合でステージングエリアへ追加できない
Laravel5.5でECサイトを作成している時にgit add できなくて苦戦したことを記録で残します。
git version 1.8.3.1です。1、起きたこと
gitのmyprojectディレクトリでgit add * のコマンドを打ったときに以下のエラーが出ました。
【エラー文】
The following paths are ignored by one of your .gitignore files:
vendor
Use -f if you really want to add them.
fatal: no files added
これは要するに、.gitignoreファイルでvendorを無視しているからステージングエリアに追加できませんよ
と書いてあります。また、-fオプションを使うと追加できますよとアドバイスもありました。
そして、ステージングエリアには何もファイルが追加されていません。.gitignoreファイルについてよく知らない人はこちらへ
-fオプションを使うとvendorもステージングエリアに追加されてしまうため今回は使用しません。
2、解決方法
git add .
コマンドを実行して解決しました。どうやら、
git add *
は全てのファイルを関係なくステージングエリアに追加しようとして.gitignoreでの指定したファイルとの不整合で追加できてなかったと思わます。
git add .
コマンドでは問題なく.gitignoreで指定したファイルを無視してステージングエリアに追加する事ができた。今後は
git add .
コマンドを使用していこうと思っています。
- 投稿日:2021-01-24T15:02:12+09:00
特定のcommitをclone
...はできなさそうなので下記で。
git init git remote add origin <hostname>:<owner>/<repo>.git git fetch --depth 1 origin <commit_id> git reset --hard FETCH_HEAD備忘録
- 投稿日:2021-01-24T12:58:26+09:00
共同開発講座を受講中にコツコツ書いた「詰まったメモ」をジャンル別に全て公開します【GitHub編】
はじめに
タイトルの通り、共同開発講座を受講中に起きたトラブルや詰まりポイントをまとめたメモ(約50記事)をジャンル別に全て公開します。
ジャンルは以下の通りなので、気になるものがあればぜひご覧ください。【ジャンル一覧】
・GitHub関連
・Laravel関連
・php関連
・データベース(migration/seeding)関連
・環境関連
・総まとめ集下記の点を、ご了承ください。
ジャンルで統一しているため、内容に関しては統一性はありません。
なるべく有用性の高いメモの使用を心がけておりますが、あくまで初学者向けの内容となっております。
自分用のメモを転用しておりますので、表現が稚拙な部分があるかと思います。・branchの切り方
ターミナルにて編集したファイルがあるディレクトリまで移動する
cd ディレクトリ名git branch で今自分がいるブランチを確認する
[vagrant@local-docker lara-d]$ git branch * developこの *develop はある機能を開発するために切ったブランチ(自分の大元となるブランチ)で、ここからさらにブランチを切らないといけない
新しいブランチを切る
git branch 新しいブランチ名git checkout ブランチ名 でブランチを移動する(*が動く)
[vagrant@local-docker lara-d]$ git branch develop * 新しいブランチ名↑このようになれば、このブランチで開発を進めて大丈夫!
・git add -u コマンド
詰まった状況
開発ブランチで不要になったファイル(Modelファイル)をローカルテキストエディタで削除
↓
git add .
↓
git commit -m "○○"
↓
リモートへpush上記を行うが削除したModelファイルが残ったままで、削除が反映されていない。
ただ、ローカルテキストエディタ上では消えている。。原因
ファイル削除に関しては
git add . コマンドの「 . 」は”全てのファイルをステージング”の意味になるので
削除されたものはリモート上では消えないことになる(存在し続ける)解決策
ステージングする時にオプションコマンドを用いる
git add -u コマンドを使用する
-u とは update の略で、削除も反映してくれるらしい。
具体的に言うと
Git 管理対象のファイルの変更、削除をすべてステージする。(新規ファイルは無視。)・git clone と git pull の違い
【git clone】
リモートリポジトリにあるディレクトリ構造を「そのまま全て」ローカルリポジトリの新たなブランチに丸々コピーする。
→開発の初回に行う??
【git pull】
Git cloneを行った後、誰かが開発して、元のリモートリポジトリにpushしたとする。
その更新分のみを自分のローカルリポジトリに反映させたい場合、git pullを用いてコピーすると
更新した差分のみが自分のところにpullされる(引っ張ってくる)。→開発過程に入ると更新されるたびに必要であれば毎回行う作業
・リモートからのpull方法
pullは基本的にリモートのメインブランチに行う。
//ブランチを表示して自分がローカルのメインブランチにいることを確認 [vagrant@local-docker lara-d]$ git branch * develop_alpha feature/kei/createProductsTable feature/kei/createUserRegistpull実行時は以下のようになる↓↓
//pullコマンドを実行 [vagrant@local-docker lara-d]$ git pull origin develop_alpha From https://github.com/*******/******* * branch develop_alpha -> FETCH_HEAD Auto-merging routes/web.php Removing resources/views/welcome.blade.php Merge made by the 'recursive' strategy. app/Providers/AppServiceProvider.php | 3 +- config/app.php | 2 +- database/.DS_Store | Bin 0 -> 6148 bytes .../migrations/2020_11_21_234119_create_m_categories.php | 31 ++++++++ .../2020_11_21_234253_create_m_sales_statuses.php | 31 ++++++++ .../2020_11_21_234400_create_m_products_statuses.php | 31 ++++++++ database/migrations/2020_11_22_120214_create_m_products.php | 42 +++++++++++ .../migrations/2020_11_23_031335_create_purchases_table.php | 39 ++++++++++ database/seeds/DatabaseSeeder.php | 5 ++ database/seeds/M_CategoriesSeeder.php | 23 ++++++ database/seeds/M_ProductsSeeder.php | 75 +++++++++++++++++++ database/seeds/M_Products_StatusesSeeder.php | 31 ++++++++ database/seeds/M_Sales_StatusesSeeder.php | 27 +++++++ database/seeds/PurchasesTableSeeder.php | 65 ++++++++++++++++ public/css/base.css | 79 ++++++++++++++++++++ resources/views/commons/error_messages.blade.php | 7 ++ resources/views/commons/footer.blade.php | 4 + resources/views/commons/header.blade.php | 15 ++++ resources/views/layouts/app.blade.php | 34 +++++++++ resources/views/login/login.blade.php | 13 ++++ resources/views/welcome.blade.php | 99 ------------------------- routes/web.php | 4 +- 22 files changed, 557 insertions(+), 103 deletions(-) create mode 100644 database/.DS_Store create mode 100644 database/migrations/2020_11_21_234119_create_m_categories.php create mode 100644 database/migrations/2020_11_21_234253_create_m_sales_statuses.php create mode 100644 database/migrations/2020_11_21_234400_create_m_products_statuses.php create mode 100644 database/migrations/2020_11_22_120214_create_m_products.php create mode 100644 database/migrations/2020_11_23_031335_create_purchases_table.php create mode 100644 database/seeds/M_CategoriesSeeder.php create mode 100644 database/seeds/M_ProductsSeeder.php create mode 100644 database/seeds/M_Products_StatusesSeeder.php create mode 100644 database/seeds/M_Sales_StatusesSeeder.php create mode 100644 database/seeds/PurchasesTableSeeder.php create mode 100644 public/css/base.css create mode 100644 resources/views/commons/error_messages.blade.php create mode 100644 resources/views/commons/footer.blade.php create mode 100644 resources/views/commons/header.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/login/login.blade.php delete mode 100644 resources/views/welcome.blade.php [vagrant@local-docker lara-d]$・リモートリポジトリへのpush時にアクセスが拒否される
※こちらは、制限付き?のgithubリポジトリでの、認可?されるためのurl設定の方法です
ターミナルにて
//commitする [vagrant@local-docker lara-d]$ git commit -m"add:DB構築-products関連" [feature/keisuke/Db_Products 8832492] add:DB構築-products関連 12 files changed, 285 insertions(+), 2 deletions(-) create mode 100644 database/.DS_Store create mode 100644 database/migrations/2020_11_21_234119_create_m_categories.php create mode 100644 database/migrations/2020_11_21_234253_create_m_sales_statuses.php create mode 100644 database/migrations/2020_11_21_234400_create_m_products_statuses.php create mode 100644 database/migrations/2020_11_22_120214_create_m_products.php create mode 100644 database/seeds/M_CategoriesSeeder.php create mode 100644 database/seeds/M_ProductsSeeder.php create mode 100644 database/seeds/M_Products_StatusesSeeder.php create mode 100644 database/seeds/M_Sales_StatusesSeeder.php //状態を確認 [vagrant@local-docker lara-d]$ git status # On branch feature/kei/Db_Products nothing to commit, working directory cleanGit push origin HEAD で今のメインブランチにプッシュするがエラーが起きる
//pushする [vagrant@local-docker lara-d]$ git push origin HEAD Username for 'https://github.com': ○○○○○○ Password for 'https://********@github.com': remote: Permission to ****/****.git denied to *******. fatal: unable to access 'https://github.com/****/****.git/': The requested URL returned error: 403 //リモートの登録URLを確認してみる [vagrant@local-docker lara-d]$ git remote -v origin https://github.com/****/****.git (fetch) origin https://github.com/****/****.git (push) [vagrant@local-docker lara-d]$Remoteに登録してあるurlの変更
[vagrant@local-docker lara-d]$ git remote set-url origin https://○○○○○○@github.com/quest-academia/yanbaru_ec_traning.git/原因
元々セットしていたURL
https://github.com/・・・・/・・・・.githttpsの後ろに何もないのが原因。
ここには自分のgithubアカウント名が入る。
正しくは
https://○○○○○○@github.com/・・・・/・・・・.git/
となる。
この後再プッシュして成功・リモート名の変更
git remote set-url コマンドを使ってurlをセットし直す
[vagrant@local-docker lara-d]$ git remote set-url origin https://○○○○○○@github.com/****/****.gitセットされたかの確認
[vagrant@local-docker lara-d]$ git remote -v origin https://○○○○○○@github.com/****/****.git (fetch) origin https://○○○○○○@github.com/****/****.git (push) [vagrant@local-docker lara-d]$ //セット完了!・共同開発中、最新のリモートdevelopをプルして開発ブランチにマージする方法
前提として、pullするのはローカルのメインブランチなので、現在開発中(作業中)のブランチからメインブランチに移動してからpullする必要がある。
移動時にコミットしていない部分があると、開発中の内容がメインブランチに移動してしまう。
なので、まずは開発中のブランチにて、commit もしくは stashをして、移動できる状態を作ること。
個人的にはcommitの方が安心。ここからは開発ブランチにて、commit もしくは stash が行われたことを前提に書きます。
develop_alphaブランチ(ローカルのメインブランチ)に移動
[vagrant@local-docker lara-d]$ git checkout develop_alpha Switched to branch 'develop_alpha'移動を確認
[vagrant@local-docker lara-d]$ git branch createUserRegist_2 * develop_alphaリモートのdevelop_alphaブランチ(リモートのメインブランチ)をpullしてくる
[vagrant@local-docker lara-d]$ git pull origin develop_alpha remote: Enumerating objects: 43, done. remote: Counting objects: 100% (43/43), done. remote: Compressing objects: 100% (10/10), done. remote: Total 55 (delta 33), reused 39 (delta 33), pack-reused 12 Unpacking objects: 100% (55/55), done. From https://github.com/****/**** * branch develop_alpha -> FETCH_HEAD Updating 53acc0b..fbabfb3 Fast-forward app/Http/Controllers/HomeController.php | 16 ++ app/User.php | 1 + composer.lock | 316 +++++++++++++++++++++++++++++++ .../2020_11_20_032020_create_m_shipments_statuses_table.php | 31 +++ database/migrations/2020_11_22_120214_create_m_products.php | 3 +- database/migrations/2020_11_23_031335_create_purchases_table.php | 8 +- database/migrations/2020_12_21_064840_create_t_orders_table.php | 36 ++++ .../migrations/2020_12_21_151942_create_t_orders_details_table.php | 44 +++++ database/seeds/DatabaseSeeder.php | 11 +- database/seeds/M_ShipmentsStatusesTableSeeder.php | 22 +++ database/seeds/M_UsersTableSeeder.php | 30 --- database/seeds/PurchasesTableSeeder.php | 20 +- database/seeds/T_OrdersDetailsTableSeeder.php | 40 ++++ database/seeds/T_OrdersTableSeeder.php | 22 +++ resources/views/auth/login.blade.php | 38 ++++ resources/views/commons/header.blade.php | 29 ++- resources/views/home.blade.php | 14 ++ resources/views/login/login.blade.php | 13 -- routes/web.php | 28 ++- 19 files changed, 647 insertions(+), 75 deletions(-) create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 database/migrations/2020_11_20_032020_create_m_shipments_statuses_table.php create mode 100644 database/migrations/2020_12_21_064840_create_t_orders_table.php create mode 100644 database/migrations/2020_12_21_151942_create_t_orders_details_table.php create mode 100644 database/seeds/M_ShipmentsStatusesTableSeeder.php create mode 100644 database/seeds/T_OrdersDetailsTableSeeder.php create mode 100644 database/seeds/T_OrdersTableSeeder.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/home.blade.php delete mode 100644 resources/views/login/login.blade.php //pullが完了開発ブランチに移動する
[vagrant@local-docker lara-d]$ git checkout createUserRegist_2 Switched to branch 'createUserRegist_2'pullしてきたdevelop_alphaブランチを、開発ブランチにマージする
[vagrant@local-docker lara-d]$ git merge develop_alpha Auto-merging routes/web.php Removing resources/views/login/login.blade.php Auto-merging database/seeds/DatabaseSeeder.php CONFLICT (content): Merge conflict in database/seeds/DatabaseSeeder.php Auto-merging app/User.php Automatic merge failed; fix conflicts and then commit the result.コンフリクトが起きた・・・
↓
エディタ上でコンフリクト解消もう一度develop_alphaをマージしようとするが...
[vagrant@local-docker lara-d]$ git merge develop_alpha error: 'merge' is not possible because you have unmerged files. hint: Fix them up in the work tree, hint: and then use 'git add/rm <file>' as hint: appropriate to mark resolution and make a commit, hint: or use 'git commit -a'. fatal: Exiting because of an unresolved conflict.エラー。
どうやらマージされていないファイルがある??...いや、だからマージしたいんだが...?
ただ、コンフリクトが起きているファイルをどうにかしないといけない。そこで
git statusで状態を確認
[vagrant@local-docker lara-d]$ git status # On branch createUserRegist_2 # You have unmerged paths. # (fix conflicts and run "git commit") # # Changes to be committed: # # new file: app/Http/Controllers/HomeController.php # modified: app/User.php # modified: composer.lock # new file: database/migrations/2020_11_20_032020_create_m_shipments_statuses_table.php # modified: database/migrations/2020_11_22_120214_create_m_products.php # modified: database/migrations/2020_11_23_031335_create_purchases_table.php # new file: database/migrations/2020_12_21_064840_create_t_orders_table.php # new file: database/migrations/2020_12_21_151942_create_t_orders_details_table.php # new file: database/seeds/M_ShipmentsStatusesTableSeeder.php # modified: database/seeds/M_UsersTableSeeder.php # modified: database/seeds/PurchasesTableSeeder.php # new file: database/seeds/T_OrdersDetailsTableSeeder.php # new file: database/seeds/T_OrdersTableSeeder.php # new file: resources/views/auth/login.blade.php # modified: resources/views/commons/header.blade.php # new file: resources/views/home.blade.php # deleted: resources/views/login/login.blade.php # modified: routes/web.php # # Unmerged paths: # (use "git add <file>..." to mark resolution) # # both modified: database/seeds/DatabaseSeeder.phpcommitされていない状態なので一度commitしてみる
[vagrant@local-docker lara-d]$ git add . vagrant@local-docker lara-d]$ git commit -m "develop_alphaをプル、コンフリクト解消" [createUserRegist_2 eb2549c] develop_alphaをプル、コンフリクト解消この後、開発ブランチへのマージに成功
結果、commitしたらオッケーだった
コンフリクトが起きているファイルは自分のファイルを使うのか、リモートにあったファイルを使うのかを決めレバそれで解消されるので(?)
解消した後にcommitするとマージコミット?が生成される。この項のまとめ
①developに移動
git checkout develop②developを最新に更新
git pull origin develop③自分の開発に移動
git checkout 自開発branch④現在の開発ブランチとdevelopブランチをマージ。
git merge develop⑤コンフリクト処理(コンフリクトがあれば)
エディタ上で簡単に処理できます。(リモートの内容を使うのか、自分の内容を使うのか、両方の内容を使うのかを選択するだけ!)
- 投稿日:2021-01-24T12:39:37+09:00
gitのアカウントを変えたらpushできなくなった話
はじめに
gitのエラー対処を忘れたないための自分用メモです。
また、環境はWindowsにgitをインストールした環境になります。エラー発生から解消まで
諸事情でgithubのアカウントをuserYYYからuserXXXに変更しました。
するとpush時に以下のエラーが発生。>git push remote: Permission to userXXX/repo.git denied to userYYY. fatal: unable to access 'https://github.com/userXXX/repo.git/': The requested URL returned error: 403どこかしらに以前のアカウントuserYYYの情報が残っているらしい。
ただ、gitのアカウント情報を確認するも問題なく変更できてそう・・・>git config --global --list user.name=userXXX user.email=userXXX@gmail.com試しにgitを再インストールしてみましたが、エラーは改善されずpushできませんでした。
本当に悲しい。。。そこでOS側の設定を確認してみました。
するとWindowsの資格情報の管理にgitのアカウントを管理してそうなものがありました。画像の更新日時は"今日"になってますが、最初はかなり古い日時になってました。
gitの情報を削除し、再度pushすると無事に成功しました。>git push info: please complete authentication in your browser... Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 264 bytes | 132.00 KiB/s, done. Total 2 (delta 0), reused 0 (delta 0), pack-reused 0 To https://github.com/userXXX/repo.git 166bd4e..2b8dd3b main -> main雑感
- gitのアカウント情報はgit側とOS側の二人がもっているらしい。
- 投稿日:2021-01-24T01:39:08+09:00
Error: Cannot find a valid baseurl for repo: baseのエラー解決法
エラー
[root@localhost ~]#
にて、
gem install git
をしたらタイトルのエラーが出たので、解決方法を探しました。解決方法
vagrantを使っていたので、まず自身のCentOSのバージョンを確認します。
# cat /etc/redhat-release
そして、次に
# cd /etc/yum.repos.d
# vi CentOS-Base.repo
とコマンドを実行し、CentOS-Base.repo ファイルを修正します。
mirrorlist= の行をコメントアウトし、新たに baseurl= の行を追加します。
[base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra ←★コメントアウトする #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ baseurl=http://vault.centos.org/6.4/os/$basearch/ ←★この行を追加する gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6追加した行 baseurl=http://vault.centos.org/6.4/os/$basearch/ の太字部分はCentOSのバージョンにあわせて書き換えてください。 CentOS-Base.repo ファイルにはbaseブロック以外にも updates、extras、centosplus、contrib のブロックがあるので同様に書き換えます。
再度実行
yum install git
を再度実行したら、無事にインストールすることができました。