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

git pushのやり方 Please make sure you have the correct access rights and the repository exists.

git remote add origin https://github.com/Harasou21/repo_name をやって、 $ git push origin master を実行したら fatal: 'origin' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. と表示が出てきた人も多いと思う。 これは、誰でも彼でもpushできるようになったらいけないので、 pushできる権限を付与してあげる必要がある。 言い換えれば、自分がgithubのアカウントの持ち主だよ。と認証してあげる必要がある。 push のやり方 ユーザー画面のセッティングをクリック セッティング画面の「Developer Settings」をクリック Personal access tokensをクリックして Generate new tokenをクリック したらいろいろでてくるが、トークンの名前は適当でもよくて、 expire(トークンの有効期限)も、任意の有効期限でいいと思います。 もちろん短ければ短いほど、セキュリティは高まりますが、有効期限切れるたびに再登録はめんどくさい。 いろいろなチェックリストもありますが、全部にチェックしといて大丈夫 したらこのようにトークンがでてるくので メモ帳とかにはりつけておいてください。 あとで使うので ターミナルに戻って soichirohara@SoichironoMacBook-Pro ideaFrameworks % git push origin master Username for 'https://github.com': Password for 'https://Harasou21@github.com': Usernameの部分は、自分のユーザーネーム passowordの部分は、自分がさっき取得したトークンを入力します。 そうしたら、pushされるはずです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitサーバーが搭載された楽譜共有WEBサービスを作成した

楽譜共有WEBサービスを作成した 概要 「楽譜を共有する」サービスを作った。 既存サービスと異なる点 基本的にコードで楽譜を記述する Gitサーバーが搭載されているので、楽譜の間違いなどを修正することが容易 アーティスト情報や曲情報を整理できるようになっている 例) 「凛として時雨」「TK from 凛として時雨」「Ling tosite Sigure」どれ...? 翻訳機能がついている それを作るにあたって、困ったこと、工夫した点、使用した技術、などをまとめたいと思います。 ※語彙力ないです alphaTab様の恩恵が非常に大きいです 自己紹介 大学3年生 都内在住 WEBエンジニア はじめまして。私は主にWEB系の開発を行っています。 プログラミングは大学1年生の時にRailsTutorialに入門しました。 今は、RailsとReactをメインで開発を行っています。 今回使用した技術 STAVE Editor STAVE Editor 概要 STAVE Editorとは、楽譜を記述するデスクトップアプリケーション シンプルに記述が可能なalphaTexを採用 Javascriptで記述することが可能 Git管理が可能 STAVE Editor 技術 STAVE Editor 工夫 alphaTab様が提供しているalphaTexをJavascriptで動くようにした。 Node.jsとElectronとReactをうまく組み合わせた UIでGitを扱える STAVE Editor 展望 alphaTexのLint機能 UIのアップデート STAVE Web STAVE Web 概要 STAVE Webとは、alphaTexの楽譜を共有、表示するWEBアプリケーションです。 Git Serverを搭載 alphaTexを表示、再生が可能 曲、アルバム、アーティスト、バンドなどの情報を整理することが可能 STAVE Web 技術 Git Serverを備えていて、pushするとNginxとRails(devise)でBasic認証を行うようになっています。 STAVE Web 工夫 NginxとRailsのdeviseを組み合わせてGit Push時にBasic認証を行った GraphQL使ってみた。 既存の楽譜アップロードサイトと差異をつけるために、曲情報、アーティスト情報、バンド情報を正しく整理できる設計になっている。 STAVE Web 展望 ブラウザでSTAVE Editorを使えるようにする。(JSでJSスクリプトの実行さえできればいける) UIのアップデート alphaTex以外もアップロードできるようにする git push時に拡張子をチェックし、不適切なファイルは取り除く gitファイルを外部のストレージサービスに保存する CI/CD 技術話 React + Typescript + VSCodeはすごい メリット ほかのJSフレームワークに比べて型が効いてる(気がする) Vue(3は知らん)やAngularに比べて、型がよく効く JSXの属性に渡す値などもReactは厳密にチェックしてくれる デメリット JSファイルにCSSファイルをインポートして要素に適応させるのは面倒くさい Typescriptに対応していないパッケージを使用する際に、既存の型システムに適応させながら組み込むのがめんどくさい React Component + Typescript Genericsすごい 場合によりますが、とにかくすごいです。コンポーネントを様々なデータ型で使いまわしたい場合最強になります JSのオプショナル演算子はとりあえず使えばいいわけではない Typescriptの「undefineやnullを含む可能性がある」という警告に対して、とりあえずオプショナル演算子をつけるのはあまりよくないという話です。 特に、GraphQLやエンドポイントの多いREST、JSフレームワークのコンポーネントがpropsのバケツリレーを多くする場合に非常に重要になります。 GraphQL + devise_token_authの組み合わせをどうにかしたい 本来であれば、REST APIかGraphQLのどちらかの設計に寄せるべきです。 しかし、GraphsQLでヘッダーの称号や認証を行うスマートな方法が思いつきませんでした。 結局、認証のいらないリクエストはGraphQL、認証のいるリクエストはRESTという構造になってしまい、気持ち悪くなってしまいました。 多言語対応した 今までの楽譜共有サービスでは、アーティストの記述の違いや、曲名の誤字、スペースの混入などが多く、検索をかける際に不便でした。 また、youtubeやspotify,itunes,wikipediaなどの、外部のサイトと連携を行う際に以下のような問題が起きました。 アーティスト名や曲名が国によって異なる wikipediaのurlが国によってことなる itunesでの曲タイトルが国によって異なる これらの問題を容易にに解決することができたのはmobilityのおかげです! GithubActions dispatch_event 便利 GithubActionsのdispatch_eventを使用してみました。 リポジトリが更新された場合、このリポジトリを所有する親リポジトリの参照を更新するものです。 わざわざ親リポジトリを開いて、下記のコマンドを実行するのはめんどくさかったので、よかったです git submodule update git add git commit git push 展望 実はStave Web/Editorだけではなく、Stave Effectorのプロトタイプも作成しています。これは、ブラウザのWEB Audio APIを使用して、ギターなどのエフェクターを仮想的に作るものです。こちらの開発もしたいと思っています。 個人的には、コードベースの楽譜データを貯めると、いろんなサービスに展開することができると考えています。 デベロッパー向けにAPI解放することで機械学習による作曲ができる カラオケサービス 楽器の学習サービス 作曲や楽器への学習 音楽業界の振興 ...etc デプロイしたのですが、それを公開するのはまだ早いと感じています。 著作権の問題を解決するための窓口のシステム開発や、UIのアップデートは必須です。 また、様々な音楽著作権団体と包括契約を行う必要があるでしょう。 なので、いつかデプロイできたらなーと考えています! ここまで読んでいただきありがとうございました! なにかありましたら、下記のTwitterから気軽にメッセージをください。 (就活してます) Twitter
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitでリポジトリの接続先を変更する

現在の接続先を確認します。 $ git remote -v 初期化する $ rm -rf .git gitのリポジトリを作成する $ git init ファイルをインデックスに追加する(コミットの対象にする). にすることで全てのファイルを指定します。 $ git add . インデックスに追加した変更をリポジトリに記録する。 $ git commit -m "first commit" リモートリポジトリと接続を行う。 $ git remote add origin <新しいリモートリポジトリ> 強制的にmasterブランチにpushします $ git push -f origin master 接続先を確認します。新しい接続先になればOKです。 $ git remote -v  参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2009~2013年のGit書籍の紹介

バージョン管理ソフトのGitは2005年にLinus Torvalds氏によって作成されて以来、バージョン管理ソフトとして多くの人に利用されています。 そんなGitについての技術書は2009年ごろから現在の2021年まで数多く出版されており、今回はGitの技術書についてまとめた記事です。2009~2013、2014~2016、2017~2021の3つの年代でおすすめの書籍を紹介するシリーズになってます。紹介する本は全て読んだ本です。 隠れた名著も多いので、興味ある方は手にとってみてください。 入門git 出版年月:2009/8/12 出版社:オーム社 ページ数:208 版型:A5 GUI or CLI:CLI レベル:Git中級者向け 概要:図も多くわかりやすいです。Gitコマンドに少し慣れた頃に読むとGitを効果的に学ぶことができると思います。git rebaseコマンドのインタラクティブモードの使い分けなど、少し凝った操作方法からワーキングツリー・インデックスエリア・ローカルリポジトリ同士の関係など初心者がとっつきにくい内容を学ぶことができます。巻末のGitコマンドのリファレンスも一覧でコマンドを確認することができるのでおすすめです。初心者からのステップアップとして購入をおすすめします。 入門Git 出版年月:2009/9/24 出版社:秀和システム ページ数:340 版型:A5 GUI or CLI:CLI レベル:Git中級者向け 概要:コマンドを中心とした書籍になっています。git addの-uオプションを大きく紹介していたり.gitignoreの正規表現など他の書籍ではあまり紹介されないような内容を紹介しています。 Gitによるバージョン管理 出版年月:2011/10/25 出版社:オーム社 ページ数:320 版型:A5 GUI or CLI:CLI レベル:Git中級者向け 概要:入門gitと同様に図も多くわかりやすいです。個人的に入門gitよりも図はわかりやすいと感じます。こちらもGitコマンドに少し慣れた頃に読むとGitを効果的に学ぶことができると思います。git reflogコマンドの操作方法や様々なコンフリクトの対応が載っており、初心者からのステップアップとして購入をおすすめします。 その他 アリスとボブのGit入門レッスン 出版年月:2012/9/18 出版社:秀和システム ページ数:288 版型:A5 実用Git 出版年月:2010/2/19 出版社:オライリージャパン ページ数:372 版型:A5 まとめ 2009~2013年は現在の技術書からすると技術レベルの高い書籍が多いように思いました。紹介した3冊全てCLI、コマンドでのGitコマンドなのも印象的でした。 「入門git」など10年経っても役立つ内容であり、非常に高い完成度だと感じました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

githubの既存リポジトリからローカルリポジトリを設定する手順

前提 すでに動いているプロジェクトがあり、githubを利用している中で ローカルをvirtual boxからDockerに移行する時に githubからローカルリポジトリを作成する手順をまとめます。 作業手順 ディレクトリ作成 任意のディレクトリを作成します。場所は好きなところに設置できます。 gitリポジトリに設定 作成したディレクトリをgitリポジトリにします。 git.sh $ git init 成功すると.gitというディレクトリが作成されていると思います。 以下のコマンドで確かめます。 gitstatus.sh $git status On branch master No commits yet nothing to commit (create/copy files and use "git add" to track) 上記のように表示されればgitリポジトリとして設定が完了しています。 リモートリポジトリを設置 リモートリポジトリを設定します。 gitremoteadd.sh $ git remote add origin git@github.com:username/example.git ※usernam/example.gitの部分はgithubのリポジトリ画面から 右上にある緑のcodeというボタンから取得してください。 リモートリポジトリが設定されたかは以下のコマンドで確認できます。 remote.sh $ git remote -v origin git@github.com:username/example.git (fetch) origin git@github.com:username/example.git (push) これでリモートリポジトリが設定できました。 ファイルをダウンロード 以下のコマンドを実行しファイルをダウンロードしリモートと同期します。 gitpull.sh $ git pull origin master 現在ではorigin mainとすることがデフォルトなので 適宜調整してコマンドを実行してみてください。 実行後ファイルがダウンロードされていて 以下のコマンドでブランチ、ログが表示されれば成功です。 logbranch.sh $ git log $ git branch ブランチを作成 当方のプロジェクトではgithub-flowを採用していたので featureブランチを切りました。 feature.sh $ git checkout -b feature $ git branch * feature master テストコミットをプッシュしてみる テスト的にからファイルを作成してプッシュしてみます。 test.sh $ touch test.txt $ git add . $ git commit -m "Test commit" $ git push origin feature これでプッシュが成功すれば新しいローカルリポジトリの設定は完了です。 なぜDockerなのか? 最後に余談ですがなぜDockerなのか?の理由を書いてみます。 M1 MacBookでvirtual boxが使えない。 プログラム言語、DB、CMSのバージョン切り替えがプロジェクトごとに簡単にできる。 日本のWEB業界で広く使われている。 これらの理由からDocker移行をしています。 とはいえ自分の場合はM1で使えれば粘っていたかもという感覚でした。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Herokuデプロイ奮闘記①(Django:Windows)

2021年日本は火事場の馬鹿力で社会の荒波の中、スライムとして転生しひとときの…ボケ突っ込みの前振りはさておき、キカガクさんでdjangoとHerokuを使うことになり、その一方で下記背景もあったため最新に近い情報でいろいろ出来ないかと模索した結果、とりあえずファーストステップはクリアしたので、掲載・情報共有したいと思います。一助になれれば幸いです。 環境:Windows11    Python 3.10.0    git 2.33.1    heroku 13.5    (pythonライブラリはrequirements.txtにて記載) 背景 https://devcenter.heroku.com/articles/python-support にてpython runtimeのサポートversionが3.10だったためいけないか 試行錯誤したいと思いました。あと、Windows11PCの方が速そうかな(;^_^Aと。 0.準備 Visual Stadio Code(以後vscode)をインストールして下さい。 1.pythonのインストール pythonをインストールして下さい(当時最新 3.10.0) 2.vscodeの拡張機能を必要に応じてadd-onして下さい。 @sensuikan1973さんがおすすめの拡張機能を紹介しています。ご参照下さい。  https://qiita.com/sensuikan1973/items/74cf5383c02dbcd82234 3.仮想環境を作るフォルダを作成し(ここではHello World)、ファイルタブで「フォルダを開く」を選択して下さい。 こんな感じになります。 4.vscodeを起動してターミナル(タブ 表示で選択or Ctrl+@ )を表示し、コマンド プロンプトを追加します。 5.コマンドプロンプトにて >python -m venv djangovenv を実行し、djangovenvフォルダを作成します。 上記のコマンドの djangovenv の部分は自身で名前を設定できる部分です。自身で Web アプリを作成する際には任意の名前に変更してもかまいません。 6.仮想環境の起動 現在、仮想環境は起動していません。なので下記のコマンドを実行して下さい。 >djangovenv\Scripts\activate ※以降、仮想環境起動のまま処理をして頂くことをお勧めします。 仮想環境が立ち上がるとこんな感じになります。 7.djangoのインストール 仮想環境には Django がないのでインストールしましょう。Python の仮想環境を使用しているので、pip を使用できます。「==version」を加えてver指定もできます。 >pip install django==3.2.9 # or >pip install django 8.helloworldprojectフォルダの作成 >django-admin startproject helloworldproject をコマンドプロンプトで実行して「helloworldproject」フォルダを作成して下さい。 成功するとこんな感じになります。 helloworldproject は、今回作成するプロジェクトのフォルダの名前です。実際に自作で作成する場合は、任意の名前を指定できます。 >cd helloworldproject 開発サーバの起動には次のコードを実行します。  >python manage.py runserver 【補足】  ・python ~ が上手く動かない時    python の部分を python3 に変更して実行してください。  ・Windows OS でうまく動作しない時    >python3 manage.py runserver 0:8000 9.<\helloworldproject\settings.py>を編集します。 (1)「import os」の追加 os依存になるpathの通し方をコントロールするために必要になります。 (2)BASE_DIRの変更 (1)に伴い指定するディレクトリを変更します。 # Djangoにおいて基本となるフォルダ(manage.py)の場所を示しています。 BASE_DIR = Path(__file__).resolve().parent ⇒BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) (3)hostの編集   ワイルドカード「*」を使ってアクセスの指定範囲を広げます。 #hostの編集 ALLOWED_HOSTS = [] ⇒ALLOWED_HOSTS = ['*'] (4)DBのPath編集 (1)の編集に伴いTEMPLATESで指定しているディレクトリを変更します。 #DBのPath編集 'NAME': BASE_DIR / 'db.sqlite3', ⇒'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), (5)言語、時間設定変更 日本の設定にします。 #言語、時間設定変更 LANGUAGE_CODE = 'en-us' ⇒LANGUAGE_CODE = 'ja' # 時間の設定 TIME_ZONE = 'UTC' ⇒TIME_ZONE = 'Asia/Tokyo' (6)日本語変換確認 下記命令をコマンドプロンプトで実行し、日本語になっているか確認します。 >python3 manage.py runserver 10.<\helloworldproject\helloworldapp>フォルダを作成・編集します。 > python manage.py startapp helloworldapp   をコマンドプロンプトで実行してフォルダを作成します。成功すると以下の構成になります。 11.< /helloworldproject/settings.py>を編集します。 ★INSTALLED_APPSの編集 使うアプリケーションの定義にhelloworldappを追加します。 #Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] ⇒INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'helloworldapp' #追加 ] 12.<\helloworldproject\urls.py>に追記します。 ★includeを追加し、ファイル名を含むurlを指定可能にします。  from django.contrib import admin  from django.urls import path   urlpatterns = [   path('admin/', admin.site.urls),  ] ⇒from django.contrib import admin  from django.urls import path, include # includeを追加    urlpatterns = [   path('admin/', admin.site.urls),   path('hello/', include('helloworldapp.urls')), # 追加  ] 13.< helloworldapp/urls.py >を作成します。 ★12.で指定したファイルを作成します。 from django.urls import path urlpatterns = [ path('', hellofunction), ] 14.< helloworldapp/views.py>に追記します。 ホームページで表示されるライブラリをimportし、そこで使う関数を定義します。  from django.shortcuts import render ⇒from django.shortcuts import render # こちらは後で使用します。  from django.http import HttpResponse # 追加  def hellofunction(request):  return HttpResponse('Hello World !') 15.起動確認をします。 >python manage.py runserver or >python manage.py runserver 0:8000   でHTMLを立ち上げて「Hello World!」と表示されるか確認します。但し、このままだと表示されるアドレスはhttp://127.0.0.1:8000/hello になりますのでご注意下さい。 16.を編集します。 HTMLファイルを呼び出せるようにさらに変更します。  from django.shortcuts import render    from django.http import HttpResponse  def hellofunction(request):  return HttpResponse('Hello World !') ⇒from django.shortcuts import render    def hellofunction(request): return render(request, 'helloworldapp/hello.html') 17.< helloworldproject/templates/helloworldapp/hello.html>フォルダ・ファイルを作成します。 16で指定したHTMLを作成します。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My First Django</title>   </head> <body> <p>Hello World !</p> </body> </html> 18.< helloworldproject/urls.py >を編集します。 起動した仮想環境直でアクセスしたいので'hello/'を削ります。 from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('helloworldapp.urls')), # 'hello/' → '' に変更 ] 19.環境の仕様を確認します。 >python manage.py runserver 20.必要なライブラリをインストールします。 Herokuに必要なライブラリのインストールをします。要領は以下の通りです。 >pip install gunicorn また、インストールするライブラリを以下に列記します。   ・backports.entry-points-selectable   ・certifi   ・distlib   ・django-heroku   ・django-toolbelt   ・filelock   ・gunicorn   ・pipenv   ・platformdirs   ・six   ・static3   ・virtualenv   ・virtualenv-clone ※手動(pip)でインストール、またはその際に追加インストールされたライブラリを列記しています。 このライブラリはhttps://devcenter.heroku.com/ja/articles/getting-started-with-python を参考に記載しています。また英語表記ですが簡単な説明はhttps://pypi.org/project/ に書かれていました。必要に応じてご確認下さい。 21.gitのインストールします。 普通のPCへのインストールの要領でexeファイルを叩きます。詳細はhttps://qiita.com/HyunwookPark/items/d399f6959fc922a15ee1 ( HyunwookPark(Embodiea Lab.)様の記事)をご参照ください。 22.herokuのインストールします。 https://devcenter.heroku.com/ja/articles/getting-started-with-python#-2 からダウンロードしてexeファイルをダブルクリックし、インストールして下さい。アカウント登録についてはこちらをご参照下さい(https://mebee.info/2020/02/01/post-5039/ )。 23.requirements.txtの取得します。 >pip freeze > requirements.txt をコマンドプロンプトで実行し、requirements.txtを作成します。 24.pipfileの作成します。 >pip install -r requirements.txt をコマンドプロンプトで実行し、pipfileを作成します(これを使ってデプロイ時のライブラリを読み込むようです)。 25.< helloworlproject/settings.py >の修正します。 以下を追記して、import出来るようにしておきます。  # https://docs.djangoproject.com/en/3.2/howto/static-files/  STATIC_URL = '/static/' ⇒# https://docs.djangoproject.com/en/3.2/howto/static-files/  STATIC_URL = '/static/'  import django_heroku #追記  django_heroku.settings(locals()) #追記 26.git bashにターミナルを変更します。 27.ディレクトリを必要なファイルが読み込める所(.Procfile,.gitignore)へ変更します。 $cd helloworldproject 28.デプロイに必要なファイルを作成します。 (1)Procfile ファイルの中身は以下を記載下さい。 web: gunicorn helloworldproject.wsgi Procfile の中には下記のように process type : commandの順で記述し、上記だと web がプロセスタイプ、gunicorn ~ にコマンドが記述されています。今回はプロジェクト名が helloworldproject のため、 helloworldproject.wsgi と指定しています。 (2).gitignore ファイルの中身は以下を記載下さい。 *.pyc *~ __pycache__ djangovenv db.sqlite3 /static .DS_Store (3)runtime.txt 使うpythonのバージョンを指定します。中身は以下のように記載下さい。 python-3.10.0 デプロイする上で不必要なものを無視するように指定します。 29.herokuにログイン $heroku login 上記のようになるので、赤線の部分を削って上位の作成したアプリのあるアドレスへ移動します。 30.appriをpython同梱で作成 $heroku create アプリケーション名 --buildpack heroku/python 31.heroku add-onの準備 (1)アプリを選択します。 (2)Find more add-onをクリックします。 (3)下記画面に移るのでスクロールし、 Postgresを選択します。 (4)Submit Order Formを選択します。 (5)Heroku Postgresをインストールします。 (6)タダなのはこれHobby Dev - Freeしかないのでこれを選択します。その上でApp To Provision To(赤線)に対象のアプリ名を記入しSubmit Order Formを確定します。 32.gitの処理 (1)初期化します。 $git init (2)herokuで作ったアプリとvscodeで作ったフォルダを繋ぎます。 $heroku git:remote -a アプリケーション名 (3)デプロイに必要なファイルを全て選択します。 $git add . (4)プッシュ出来るように、コミット状態にします。 $git commit -m 'first commit' (5)プッシュし、アプリを作成します。 $git push heroku master 長々となってしまいましたが、以上で問題なく…出力出来るはずです(何回ミスして破壊と創造繰り返したことか...( = =) トオイメ)。あちこち調べて、いらないファイルを作ることもあったのでまとめてみました。皆様の一助にならんことを切に願います。つたない記載で申しわけありません。一応、あとは日記帳と機械学習アプリがあるのですが…こんな感じだといつ出来上がることやら(;^_^A。一番コケるのはgit、herokuのあたりだと思いますが、この処理で出来ました。「なせば大抵なんとかなる!」というつもりで頑張りましょう。では。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

バージョン管理システム(GitとSVNの違い)

はじめに 開発の現場ではどのようなバージョン管理システムを利用するのがよいでしょうか。 アプリケーションはソースコードを含めたファイルの集合によって作られています。 開発の現場ではファイルの変更も頻繁に、かつ複数名で行われることが多いです。 そうなると大変となるのがソースコードの管理です。 この記事ではバージョン管理システムの導入を検討している方のためによく聞かれるGitとSVNの違いについてエンジニアの視点から伝えします。 バージョン管理とは... バージョン管理システムとはソースコード等のファイルを管理するシステムです。 いつ、だれが、どこにファイルを作成したか、また更新を加えたのか、などの過去のバー所を保持することができます。 障害や要望が発生した際にある時点のバージョンまで遡ることが容易になります。 また、同じソースコードに対して複数人が同時に作業を行ってもソースコードの最新版を見失わないようになります。 GitもSVNも共にバージョン管理システムであり、古典的なバージョン管理システムであるCVSからの流れを汲んでいます。 GitとSVNの違い GitとSVNの大きな違いはバージョン管理システムの種類にあります。 Gitは分散型バージョン管理システム SVNは集中型バージョン管理システムとなります。 集中型バージョン管理システムでは、リポジトリ(ファイルのバージョン管理を行う場所)はリモート環境のみに存在します。 開発メンバーはリモート環境のリポジトリにアクセスし、各ローカル環境にあるファイルをコミットしたり、ローカル環境へチェックアウトしたりします。 ※コミット:新バージョンとしてのファイル保存 ※チェックアウト:特定バージョンのファイル取得 分散型バージョン管理システムでは、リポジトリはリモート環境のみではなく、開発メンバーの各ローカル環境にも存在します。 メンバーは自身のローカル環境のリポジトリを作る際は、リモート環境のリポジトリから特定のバージョン情報をプル(Pull)して各ローカルにリポジトリを作成します。 メンバーは開発を行った際にローカル環境でコミットやチェックアウトを行います。 ローカル環境でコミットしたファイルについては適切なタイミングでプッシュを行い、リモート環境のリポジトリへコミットを反映させます。 Gitについて 公式サイト Gitソースコード管理のイメージ 特徴(メリット・デメリット) Gitの場合ローカルにあるリポジトリに自身のソースを登録することが可能なので、自分の作業の履歴を作ることが可能です。 チーム全体の履歴だけでなく、自分の開発履歴まで管理できるのが特徴です。 また、サーバ障害などでリポジトリが消えてしまったとしても、SVNの場合履歴の復元までは不可能ですが、Gitの場合は誰かのローカル環境のリポジトリから復元すれば、サーバから取得時点にはなりますが、履歴まで復元することが可能です。 デメリットとしては、慣れてしまえば簡単ですがそれなりに覚えることが多い点です。 プロジェクト内で初めて使う人が多い場合、使用方法などを浸透させるのに時間がかかります。 SVN(Subversion)について 公式サイト SVNソースコード管理のイメージ 特徴(メリット・デメリット) 仕組みが簡単な点がメリットです。 SVNを扱う際も操作がとてもシンプルなので覚えることが少なく、すぐにプロジェクト内で浸透させることが可能です。 デメリットとしては、やはりバージョンの管理がローカルでできない点です。 例えばソースを開発しているときに、細めにコミットし個人で履歴を持ちたいことはあると思います。 SVNの場合、サーバに対してコミットを行うことになるので、たくさんの開発者で共有しているリポジトリに対して細めにコミットは難しくなります。  おわりに それぞれの特徴や違いを理解できましたでしょうか。 それぞれのメリットやデメリットを理解した上で導入をご検討ください。 複数名での開発時にとても便利になると思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

実体験から学ぶ、Gitを使う意義

この記事は Ateam Lifestyle Inc. Advent Calendar 2021 2日目の記事です。 はじめに 私が初めてGitを知ったのは、学生時代にプログラミングを勉強し始めて、少し時間が経ってからでした。Gitの使い方自体はWeb上にわかりやすい記事があり、使い始めることは難しくないことだと思います。(↓おすすめの学習サイト↓) 私は便利なツールなんだろうなーと思いつつ利用し始めましたが、初めは、どんなメリットがあって、何のためにGitを使うのかという意義をあまり意識しておらず、有効活用ができていませんでした。ここではGitを使ってみようとしている方、使い始めたばかりの方を対象に、意義を意識してGitを使えるようになっていただけることを目指しています。(ここでは個人でGitを使う場合にフォーカスしています。) 僕のプログラミング初心者時代の体験談も含んでおりますので、若干回りくどいところもありますが、ご了承ください。 Gitを使うことで得られるメリット Gitを使うことで得られるメリットは大きく以下の2点です。 わざわざファイルなどをコピーして管理する無駄な手間がなくなる どんな変更をしたかを把握しやすくなる 他にも挙げ始めたらきりがありませんが、入門書でメリットとしてよく紹介されているのはこの2点だと思います。 それぞれについて少し説明します。 わざわざファイルなどをコピーして管理する無駄な手間がなくなる これから話すことは、私がGitを使う前にコードを書いていたときの話です。 ゲームを作ってみたいと思い、ネットの情報を頼りに必死でコードを書いていました。 うまく動くような状態になってから、機能を追加したくなりました。 コードを追加・修正すると、さっきまで動いていたコードが全く動かなくなっていたのでした。 もちろんこれは間違ったコードを書いていたからでした。 どの部分が動いていないのかわからないので、うまく動く状態まで一旦戻したくなりました。 しかし、気づいてみると大量のコードを書いておりCtrl+zで戻せるような状況ではありません。 詰みました。終わりです。 この失敗を経験し、次はうまく動く状態までコードをかけたらファイルをコピーしておく手段を取りました。これでいくらコードを変えようがちゃんと動く状態まで戻せます。完璧です。 しばらくこのやり方を続けてみると、新たな問題が発生しました。 ファイルが増えまくり、管理がとてもめんどくさくなったのです。 僕が書いていたのは、Unityと呼ばれるゲームエンジンで動くプログラムでした。 Unityはプロジェクトと呼ばれる単位(ディレクトリ程度の認識で大丈夫です)で管理する必要があります。 コピーも時間がかかるし、Unityでプロジェクトを開くのにも時間がかかります。 やっているうちに面倒くさくなり、結局コピーせずにコードを書いてしまう自体になりました。 Gitはこの問題を解消してくれます。 Gitではファイル等の変更履歴をコミットとして保存することができます。 うまく動く状態になったらコミットとしてこれまでの変更履歴を保存しておきます。 コードを書いてうまく動かなくなったら、そのコミットの状態まで戻すことが簡単に可能です。 どんな変更をしたかを把握しやすくなる 先程の体験談で、「うまく動く状態に戻したい」という場面がありました。 これは、「うまく動かなくなった原因となったコードの変更を特定して修正し、うまく動く状態にしたい」というのが目的です。(根本的に追加したコードが間違っていて元に戻したいこともあります。)そのため、うまく動いていた状態からどんな変更をしたかがわかればよいのです。 Gitを使う前の私は、コピーしておいたうまく動く状態のコードと、追加・修正したコードを見比べようとしました。ただし、変更が大量にあったり、複数のファイルにまたがっていたり、わけがわからなくなりました。もう無理です。 Gitはこの問題を解消してくれます。 Gitでは最新のコミットからどんな追加・修正をしたか差分を見ることができます。 自分で何を追加・修正したかを覚えていなくても大丈夫なのです。 最新のコミットだけでなく、様々な対象同士の差分を見ることが可能です。 Gitを使うことで身につく力 ここまでで話したメリットは、コードを書く際の効率を上げる、いわば便利なツールとしてのメリットでした。しかし、便利なツールとしてのメリットが最大のメリットではないと私は考えています。Gitを利用することで、「必要なプロセスを適切に細分化する力が身につく」ことが最大のメリットであり、これが私にとっての、何のためにGitを使うかの回答です。 必要なプロセスを適切に細分化する力が身につく Gitを使うだけで、「うまく動く状態に戻すことができる」「どんな変更をしたか把握できる」という要望を完全に満たすことはできません。 Gitを使い始めて間もない私は、「この処理も追加したい」「これも変更しよう」と、ついつい一つのコミットに色々な追加・修正を含めていました。一つのコミットが肥大化することで大きく2つの問題が起こります。 1つ目は、一部の追加・修正を元に戻したいのにも関わらず、他の変更もまとめて元に戻す必要が発生してしまうことです。元に戻したあとに、また先程書いたコードを書く必要があります。これではコードを書くのに時間がかかってしまいます。 2つ目は、追加・修正の差分が把握しづらくなってしまうことです。追加・修正したコードがうまく動かない場合に、差分を見てもその量が多く、原因がどこにあるのかがわかりづらくなってしまいます。 実装するために必要な追加・修正を、適切に細分化してコミットにすることで、「うまく動く状態に戻すことができる」「どんな変更をしたか把握できる」という要望を満たすことができるのです。 適切に細分化したコミットをつくることを意識することで、必要なプロセスを適切に細分化する力が身につきます。この力はプログラミング以外の場面でも役立つ力になります。たとえば、達成したい大きな目標があったとします。大きな目標を適切に細分化すると、小さな目標の集まりにすることができます。小さな目標のうち、自分が達成できた/できていないものに分けることで、自分には何が足りないのかを今までよりも具体的に捉えることができます。目標を達成するためにも、細分化の力は役立つのです。 最後に この記事では、Gitを使う意義についてお話しました。 ぜひツールを使う意義を意識しながら利用し、有効活用していきましょう!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

globalにgitでignoreをsetする手順

やり方 git環境は整っていることが前提 ファイルを作る touch $HOME/.config/git/ignore ファイルに書き込む ignore .DS_Store 拡張子指定で一括 例 ignore *.code-workspace 試してみる https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreexcludesFile https://git-scm.com/docs/gitignore#_description が正しければ,これだけでパスは通っているはずである,試しに動かそう man_gitconfig ... Defaults to $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead. See gitignore[5]. ... 上手くいけばOK,ダメなら次の手順へ パスを通す git config --global core.excludesfile $HOME/.config/git/ignore これをやると .gitconfig [core] excludesfile = /Users/SolunaEureka/.config/git/ignore でパスが通るなぜわざわざこんなことやらにゃならんのだ 流石にコレなら動くだろう パスを消す git config --global --unset core.excludesfile 理由は知らんけど消してもしばらく動く場合がある,つーか私はそうだった おまけ 初めてgithubでレポジトリ作ったけど,作った時点で案内に乗せられてREADMEを作ると,強制的に「initコミット」が発生してしまい,既に手元に作り溜めしたファイルがある場合は,そのブランチにはプッシュできない・別ブランチにpushできてもプルリクできない,という「詰みの状況」が発生した,There isn’t anything to compare.って表示されていた,いや確かにそれはそうなのだが… あとパスの挙動が謎すぎた,まぁ今はちゃんと動いてるからコレでよしとするか…
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む