私はプロジェクトのスケルトンを格納するために使用する 'skeleton'と呼ばれるローカルのGitリポジトリを持っています。さまざまな種類のプロジェクト用にいくつかのブランチがあります。
casey@agave [~/Projects/skeleton] git branch
* master
Rails
c
c++
新しいプロジェクトのマスターブランチをチェックアウトしたい場合は、
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
そして、すべてが私がそれを望んでいる方法です。具体的には、新しいマスターブランチがスケルトンマスターブランチを指しているので、基本プロジェクト設定への変更を回避するためにプッシュアンドプルできます。
しかし、うまくいかないのは、別のブランチを複製したい場合です。私が欲しいブランチ、例えばRails
ブランチだけを引っ張るように手に入れることができないので、新しいリポジトリにはデフォルトでスケルトンリポジトリのmaster
ブランチにプッシュし、そこから引っ張るRails
ブランチがあります。
これを実行するための良い方法はありますか?あるいは、これはGitが私に物事を構造化させることを望んでいる方法ではないかもしれません、そして私は確かにそれにオープンです。 Ruby on Railsスケルトンレポジトリがマスタースケルトンレポジトリを追跡している状態で、複数のレポジトリを持つべきでしょうか。そして、Ruby on Railsスケルトンリポジトリを複製する個々のプロジェクト。
注:git1.7.10 (2012年4月) を使用すると、実際に 1つのブランチのみを複製することができます :
# clone only the remote primary HEAD (default: Origin/master)
git clone --single-branch
as in:
git clone <url> --branch <branch> --single-branch [<folder>]
t5500-fetch-pack.sh
に見ることができます。
test_expect_success 'single branch clone' '
git clone --single-branch "file://$(pwd)/." singlebranch
'
浅いクローンを作成するときに暗黙的に指定されます。
これはgit clone --depth 1
を帯域幅を節約する最も簡単な方法にします。
そして、Git 1.9.0(2014年2月)以降、浅いクローンはデータ転送(Push/pull)をサポートしています。そのため、このオプションは現在さらに有用です。
「 git clone --depth 1
(シャロークローン)は、実際よりも便利ですか? 」を参照してください。
浅いクローンを「元に戻す」には、「 浅いクローンを完全なクローンに変換する 」(git 1.8.3以降)をご覧ください。
# unshallow the current branch
git fetch --unshallow
# for getting back all the branches (see Peter Cordes' comment)
git config remote.Origin.fetch refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow
として クリス コメント:
足りない枝を取得して
--single-branch
を元に戻すための魔法の行は(git v2.1.4)です。
git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow
一つの方法は以下を実行することです。
git clone user@git-server:project_name.git -b branch_name /your/folder
branch_name
はあなたが選んだブランチで、 "/ your/folder"はそのブランチの保存先です。これは他のブランチがあなたに行ったり来たりする機会を与えてくれることは事実です。今、Git 1.7.10から始めて、これを実行できます。
git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder
Gitバージョン1.7.3.1(Windows上)を使用して、以下を実行します($BRANCH
はチェックアウトしたいブランチの名前、$REMOTE_REPO
はクローンを作成したいリモートリポジトリのURLです)。
mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f Origin $REMOTE_REPO
git checkout $BRANCH
このアプローチの利点は、後続のgit pull
(またはgit fetch
)呼び出しも要求されたブランチをダウンロードするだけで済むことです。
長い道のりを試すことができます。
mkdir newrepo.git
cd newrepo.git
git init
git remote add Origin file:///path/to/original
git fetch Origin branchiwant:refs/remotes/Origin/branchiwant
git checkout -b branchiwant --track Origin/branchiwant
これが何をするものです:
うまくいけば、それはあなたがしているもののようなものになるでしょう。
下記のコマンドを使用してそれを行うことができます。
git clone -b branch_name --single-branch project_url local_folder_to_clone_in
git-cloneのmanページ から:
--single-branch
はクローン作成中のあなたの友人です--branch <branch name>
と一緒に使うのを忘れないでください。そうでない場合はリモートプライマリHEADのみがクローンされます(デフォルトでmaster)
常にすることを忘れないでください Ctrl + F5 キャッシュからのものではなく、新鮮なソースを読むために:-)(私はこのオプションについて長い間知りませんでした。)
git clone <url> --branch <branch> --single-branch
URLとブランチ名を入れるだけです。
ブランチを1つだけ複製します。これが最も簡単な方法です。
$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
公開鍵を持っていないGitのブランチを複製するには、これを使います。
git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
特定のブランチを複製するには、次のようにします。
git clone --branch yourBranchName [email protected]
少し遅れましたが、この問題を解決するために使用したソリューションを追加したいと思いました。解決策を見つけました ここ 。
とにかく、質問は「他のレポの支店から新しいプロジェクトを開始する方法」を尋ねているようです。
これに対して、私が使用した解決策は、まずgithubで、あるいはどこにでも新しいリポジトリを作成することです。これはあなたの新しいプロジェクトへのレポとして役立つでしょう。
ローカルマシン上で、新しいプロジェクトのテンプレートとして使用するブランチがあるプロジェクトに移動します。
コマンドを実行します。
git Push https://github.com/accountname/new-repo.git +old_branch:master
これが何をするかはold_branchをnew-repoにプッシュし、それを新しいリポジトリのマスターブランチにすることです。
その後、新しいリポジトリを新しいプロジェクトのローカルディレクトリに複製するだけで、新しいプロジェクトが古いブランチから開始されます。
flask repoの例を見てみましょう。マスターに加えて3つのブランチがあります。 1.1.xリモートブランチをチェックアウトしましょう
gitリポジトリのクローンを作成します
git clone https://github.com/pallets/flask
リポジトリにcdします。
cd flask
リモートブランチ1.1.xを取得する
git fetch Origin 1.1.x
ブランチをチェックアウトする
git checkout 1.1.x
ブランチ1.1.xに切り替えて、リモート1.1.xブランチを追跡します。
Cmdを開きます。
cd folder_name
(ブランチを複製する場所のパスを入力)
たった一つのコマンド:
git clone url_of_projecturltoclone -b branch_name
2ステップでできる
リポジトリを複製する
git clone <http url>
必要なブランチをチェックアウトする
git checkout $BranchName