Gitは分散VCSであるため、リポジトリに対して行われた変更の完全な履歴が必要です。
では、extract最初に複製されたバージョンのレポを使用できますか?
実際、私は既存のローカルリポジトリに多くの変更を加えました。データを失って元の状態に戻らないようにします。しかし、既存のgitオブジェクト(blob/tree)を使用して、元のリポジトリ(最初に複製したもの)を他の場所に抽出したいと思います。
注:現在、gitサーバーにアクセスできません。
これを試して:
git clone SOURCE_PATH NEW_PATH # clones everything you have committed up to now
cd NEW_PATH # go to new clone, don't modify the pre-existing one
git reset --hard REV # REV is the revision to "rewind" to (from git log)
したがって、どのリビジョンに戻るかを明示的に把握する必要があります(Gitは、最初に複製したリビジョンをおそらく認識していませんが、おそらくそれを把握できます)。最初のステップは、ローカルディスクから別のディレクトリにあるローカルディスクにクローンを作成することです。これにより、既存の作業をそのままにしておくことができます。
私が正しく理解している場合は、リモートリポジトリからプロジェクトのクローンを作成し(ローカルリポジトリを呼び出します-local_repo_1
)、その後、プロジェクトにいくつかの変更を加え(コミットされていません)、元のリポジトリの別のコピーを複製します。 git repoですが、リモートからではなく、local_repo_1
からです。
これは、次の手順で実行できます。
作業内容を隠し場所に保存するgit stash save stash_name //give any name to your stash, say local_repo_2
これで、リモートから複製した裸のリポジトリが残ります。次の方法で複製できます。
gitリポジトリから移動しますcd ..
クローンgit clone /path/to/local_repo_1 local_repo_2 // local_repo_2 is the new repo
ローカルコミットもある場合は、git log
そしてそれを希望のSHAにリセットしますgit reset --hard SHA
そして最後に、local_repo_1
に戻ってスタッシュを適用できますgit stash apply
出来上がり、今あなたは持っています:
local_repo_1:ベアリポジトリの上に加えた変更を元の形式に戻します。
local_repo_2:ローカル変更なしのリモートリポジトリのコピー
はい、絶対にできます。
このようなものを試してください
クローンを作成したとしましょう
c:/originalRepository
新しいフォルダに切り替えて、
git clone file:///c:/originalRepository
以前に複製されたリポジトリがあります。
このスクリプトをbashに追加できます
reclone () {
set -e
basename=${PWD##*/}
remoteurl=$(git remote get-url --Push Origin)
cd ..
echo $basename
echo $remoteurl
rm -rf $basename
git clone $remoteurl
cd $basename
set +e
}