2017-02-19 8 views
0

my answeranother question私は、一時的な作業ツリーをチェックアウトする必要があるソリューションを提案しましたが、ソースリポジトリを何とか壊さずに安全に実行する必要がありました。特に、操作は他のgit操作と並行して実行するのが安全でなければなりません。私はそれができると信じて、答えでそれを詳述しなかったし、それを行う方法を示すコメントを提供しなければならなかった。この自己回答の質問は、ギャップを埋める。gitリポジトリから一時的な作業ツリーを安全にチェックアウトする方法は?

答えて

1

以下のスクリプトは、ソースリポジトリに影響を与えずに作業ツリーを現在のディレクトリにチェックアウトします(特に、書き込みアクセス権のないリポジトリ、たとえば別のユーザに属するリポジトリで実行できます)。

使用:

git-checkout-tmp-worktree repo_path [revision] 

例:

git-checkout-tmp-worktree ~/myrepo1 
git-checkout-tmp-worktree ~/myrepo1 HEAD^^ 

gitのチェックアウト-TMP-worktree

#!/usr/bin/env bash 

if [[ $# -eq 0 || $# -gt 2 ]] 
then 
    echo >&2 "Usage: $(basename "$0") repo_path [revision]" 
    exit 1 
fi 

repo="${1}" 
revision="${2:-HEAD}" 

tmpdir="$(mktemp -d)" 
trap "rm -rf '$tmpdir'" EXIT 
GIT_INDEX_FILE="$tmpdir/index" git --git-dir="$repo"/.git checkout "$revision" . 
関連する問題