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

Git で submodule 含んで最新コミットだけ checkout したい

背景

  • llvm-project とか repo サイズが大きいのを submodule で git repo に追加している.
    • 普通に引くと 1GB とか 2GB とかになるような repo で, でかくてつらい
  • しかしビルドに使うだけなので, 最新コミットだけ引ければよい
    • CI でビルドしたいとか.

方法

--depth 1 で最新コミットだけ引けますが, submodule には適用されません.

Using git to get just the latest revision
https://stackoverflow.com/questions/1209999/using-git-to-get-just-the-latest-revision

--recurse-submodules --shallow-submodules つければいけそうであるが, オプションは古いようで最新 git では利用できない.

結論

未解決

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

git reset --hardメモ

Git reset

バージョンを切り替えて比較デバッグすることが良くあると思います。
そんなときによくreset --hardを使います。
その時使用するコマンドのメモ書きです。

ログを表示

git reflog

結果

68ae43a (HEAD -> master) HEAD@{0}: commit: Ver.0.4.2
7a44b39 HEAD@{1}: commit: Ver.0.4.1
6d29c98 HEAD@{2}: commit (initial): Ver.0.4.0

先頭のハッシュ値を使います。

git reset --hard 7a44b39

バージョンを行ったり来たりしていると、reflog結果がごちゃごちゃしてくるので、
最新のハッシュ値を見つけるのは一苦労。

そこで最新のバージョンに戻すには、

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

[remote rejected] master -> master (branch is currently checked out) 対策

状況

master のあるデスクトップPCにネットワークのフォルダ共有して、ノートPCにcloneを作成しました。
ノートPCを持ち歩いて、現場環境でデバッグ・修正した結果をpushしてmasterに反映しようとしました。

失敗

以下のようなメッセージが出て失敗。

[remote rejected] master -> master (branch is currently checked out)

いろいろな記事を参考にさせていただきました。
この記事が適切でした。
git pushでremote rejectedと怒られた時にやったことメモ: Qiita

手順

1)デスクトップPC(master)側

git config --bool core.bare true

2)ノートPC側

git push origin master

3)デスクトップPC(master)側

git config --bool core.bare false

ここで、Gitにステージングされている変更は、2)-1)の変更。
つまり、ノートPCで変更した内容をもとに戻す内容になってしまいます。

4)デスクトップPC(master)側
ステージングされた変更を取り消し破棄

・・・

3)、4)の手順が書いてある記事がなかったので、投稿してみました。

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

【Git】今更だけどrevertについてまとめてみた

git revertで何ができるの?

既存のコミットを取り消すための「新しいコミット」を作成する。

git resetとの違い

git reset

  • 特定のコミットを元に戻す
  • コミットを取り消したというコミットが残らない

git revert

  • 既存のコミットを取り消す。
  • コミットを取り消したというコミットが残る

git revertの使いどき。

特定のコミットを取り消したい。

git revert <commitID>

特定のコミットIDを指定することで、そのコミットを取り消すコミットが作成されます。オプションをつけなかった場合、コミットメッセージの編集モードに移行します。

コミットメッセージを編集したくない場合。

git revert <commitID> --no-edit

 commitをしないrevert

複数のコミットをrevertする場合、一度にコミットしたいときに便利。

git revert <commitID> -n

 マージコミットをrevert

二つのコミットのうち、どちらに戻すのか選択する必要がある。

git revert -m 1 <commitID>

1,2の判断はgit showコマンドで対象のコミットをみに行けばわかる。

参考記事

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

WindowsのOpenSSHでGitサーバーを立ち上げる

はじめに

Git for Windowsにはsshdが添付されてるのでそのままサーバーとして運用出来る・・・はずなんですが情報も少ないし面倒な割にサービス起動出来ないなど制約も多い
WindowsにはOpenSSHが用意されていますのでこっちでサーバーを立ち上げた方が潰しが利くかな、ということでやってみた備忘録です

自分のメモ用なので他の環境では違う可能性があるのはご承知おきください_○□=

メリット

  • Windowsなので気軽にGitサーバーの立ち上げが出来る
  • OpenSSHを使うことで潰しが利く・・・かも?
  • 容量がいっぱい使える(gitの商業サービスは容量制限がキツい)

デメリット

  • Githubのような商業サービスで出来る高度なことはほとんど出来ない
  • OpenSSHでデフォルトシェルをbashに切り替えるので他の理由でsshにログインするときもbashを使用することになります:innocent:
  • SSHアクセス時のShellをBashにしてしまうので、Git以外でログインのときもBashを使うことに・・・
  • 不正アクセス等の対策も別途考えないと大変なことに

準備

今回環境&使用したものです

設定方法

1)Gitのインストール

  • Gitのインストール
    大体はデフォルトのままでOKなので割愛します

    ただし一つ注意点として、現在のバージョンではアルファベット以外のユーザー名に問題が生じることがあるようです

    その場合には"Configuring the terminal emulator to use with Git Bash"で"Use Windows'default console window"を選ぶ必要があります
    GitInstall_termial emulator.png

  • Pathの設定
    環境変数PathにGitのフォルダを追加します
    環境変数Pathの設定

C:\Program Files\Git\cmd
C:\Program Files\Git\usr\bin
C:\Program Files\Git\bin
C:\Program Files\Git\mingw64\bin
C:\Program Files\Git\mingw64\libexec\git-core

2)OpenSSHのインストール

  • 配置
    上のリンクからダウンロードした場合zipにそのまま固まっていますので、OpenSSH用のフォルダC:\OpenSSHを作り展開します
    OpenSSHFolder

  • Pathの設定
    環境変数PathにOpenSSHのフォルダを追加します

C:\OpenSSH\
  • PowerShellを管理者特権で起動し、スクリプトの起動制限を解除
    スクリプトを使用するので起動制限を解除します。危険なので後で制限復帰をするのを忘れずに!
PowerShell
PS c:\> Set-ExecutionPolicy Bypass                 //スクリプトの制限解除

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):Y

PS c:\> Get-ExecutionPolicy                       //ちゃんと設定出来たか確認
Bypass                                            //Bypass:確認なしにすべてのスクリプトを実行
  • sshのインストールスクリプトを実行する
PowerShell
PS C:\OpenSSH> .\install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
[SC] ChangeServiceConfig2 SUCCESS
sshd and ssh-agent services successfully installed
  • ポートの開放
    ここではポート22を開放してます、変更する場合は他の値にします
    ちなみに22にするとエラい勢いで知らないところからアクセスされます。変更おすすめ
PowerShell
PS C:\> New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
PS C:\> netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
  • パーミッションの変更
    OpenSSHではパーミッションが重要になります。スクリプトがあるので任せましょう(最初手動でやって失敗した(汗)
    ユーザーを新しく作ったり関連する部分のパーミッションを弄った場合でsshが上手く動かなかった時にもこのスクリプトを使います
PowerShell
PS C:\OpenSSH> .\FixHostFilePermissions.ps1
  • スクリプトの起動制限を復帰
PowerShell
PS c:\>Set-ExecutionPolicy Restricted            //スクリプトの制限復帰

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):Y

PS c:\>Get-ExecutionPolicy                       //ちゃんと設定出来たか確認
Restricted                                       //Restricted:すべてのスクリプトを制限
  • サービスの自動起動の設定
PowerShell
PS C:\> Set-Service sshd -StartupType Automatic       //自動起動の設定
  • サービスの起動と再起動
    sshdを起動・再起動したい場合のコマンド
PowerShell
PS C:\> net start sshd                                //起動
PS C:\> restart-service sshd                          //再起動

3)Gitにアクセスするユーザーアカウントの作成と設定

  • ユーザーアカウントの作成
    Gitで使用するユーザーアカウントを作成する
    CreateUser.png
    (ここではGitUserというアカウントを作成しています)

  • Gitのglobal情報の設定
    Gitのグローバル情報を設定する(globalは各ユーザーごとに管理される設定です)

PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> git config --global user.name "username"                  //利用者情報(名前)
PS C:\Users\GitUser> git config --global user.email "username@mymailserver.jp" //利用者情報(メールアドレス)
PS C:\Users\GitUser> git config --global core.quotepath false                  //日本語を表示するための設定
PS C:\Users\GitUser> git config --global sendpack.sideband false               //gitプロトコルでpushするとハングアップすることがあるのを防止
  • SSH用フォルダの作成
    • SSH用のユーザー個別フォルダc:\Users\ユーザーアカウント\.sshフォルダを作成します
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> mkdir .ssh
  • SSH鍵の作成
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser> ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\GitUser/.ssh/id_rsa):        //作成ファイル名の指定:(規定値ならそのままEnter)
Enter passphrase (empty for no passphrase):                                //パスフレーズの指定:(不要ならそのままEnter)
Enter same passphrase again:                                               //パスフレーズの再確認

(この方法でrsa形式で鍵長2048byteの秘密鍵ファイルid_rsaと公開鍵ファイルid_rsa.pubの2ファイルが作成されます。セキュリティ的に不安であれば形式を変えたり鍵長を長くするなど出来ます。詳細は他の詳しいサイトを参考にしてください)

  • SSH公開鍵の設定
    • SSH用のユーザー個別フォルダc:\Users\ユーザーアカウント\.sshフォルダに公開鍵を設定します
PowerShell(ユーザーアカウントが"GitUser"の場合)
PS C:\Users\GitUser\.ssh> cat id_rsa.pub >> authorized_keys
  • SSH設定ファイルsshd_configの変更
    C:\ProgramData\ssh\sshd_configにあるSSHの設定ファイルを変更します
Port 22                            //ポート番号
PasswordAuthentication no          //パスワード認証:不許可(これをしないと折角鍵認証を設定してもパスワードで入れてしまう)
  • パーミッションの変更
    PowerShellにてスクリプトの実行を許可した後、OpenSSHで使用したパーミッション修正スクリプトを再度実行する
PowerShell
PS C:\OpenSSH> .\FixHostFilePermissions.ps1 -Confirm:$false
  • デフォルトシェルをBashに変更
    シェルをBashに変更しないとGitのコマンドが上手く動きません
PowerShell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force 
  • 動作確認

    • OpenSSH動作確認
      クライアント側からSSHでリモートログインしてみる

      PowerShellからリモートログインしてみて接続出来れば成功です。
      ssh.exe -i id_rsa GitUser@ServerName -p 22
          id_rsa : 秘密鍵
          GitUser : アクセスユーザー名
          ServerName : サーバー名もしくはサーバーのIPアドレス
          22 : SSHポート番号
       
    • Git動作確認
      クライアント側からGitコマンドで操作してみる

      Commandラインから以下のようなgitコマンドを使用し正常に終了すれば成功です
      git clone ssh://GitUser@ServerName:22/c/repos/sample.git
          GitUser : アクセスユーザー名
          ServerName : サーバー名もしくはサーバーのIPアドレス
          22 : SSHポート番号
          c/repos/sample.git : サーバーのGitリポジトリの場所(最初のcはドライブ)

おわりに

サーバーの設定は以上です

えーとここまでやっておいてなんですが、出来れば商業サービス使った方が楽だと思います(^^;
今回はいくつかの事情により難しいと判断した故の苦肉の策ですので

それと趣旨が変わるので今回は書かなかったのですがセキュリティ面でも上記だけではダメなのでしっかり追加対処しましょう!

参考

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