كيفية استنساخ جميع الفروع البعيدة في Git ؟
-
09-06-2019 - |
سؤال
لدي master
و development
فرع سواء دفعت إلى جيثب.لقد clone
د ، pull
إد ، fetch
اد, ولكن أنا لا تزال غير قادرة على الحصول على أي شيء آخر غير master
فرع الظهر.
أنا متأكد أنا في عداد المفقودين شيء واضح, لكن يجب قراءة دليل و أنا على الحصول على أي فرح في كل شيء.
المحلول
أولا استنساخ بعيد بوابة مستودع ، cd في ذلك:
$ git clone git://example.com/myproject
$ cd myproject
ابحث في الفروع المحلية في المستودع الخاص بك:
$ git branch
* master
ولكن هناك فروع أخرى يختبئ في المستودع الخاص بك!يمكنك أن ترى هذه باستخدام -a
العلم:
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
إذا كنت فقط تريد أن تأخذ نظرة خاطفة سريعة على المنبع فرع, يمكنك التحقق من ذلك مباشرة:
$ git checkout origin/experimental
ولكن إذا كنت ترغب في العمل في هذا الفرع, سوف تحتاج إلى تتبع فرع والتي تتم تلقائيا عن طريق:
$ git checkout experimental
وسوف ترى
Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'
هذا السطر الأخير يلقي بعض الناس:"فرع" - أليس كذلك ؟ ما يعنيه حقا هو أن فرع مأخوذ من مؤشر إنشاؤها محليا بالنسبة لك.على السابقة الخط هو في الواقع أكثر إفادة كما يخبرك أن فرع يجري إعدادها لتتبع عن بعد فرع ، وهو ما يعني عادة الأصل/branch_name فرع
الآن إذا نظرتم إلى الفروع المحلية ، وهذا هو ما سترى:
$ git branch
* experimental
master
يمكنك تتبع الواقع أكثر من مستودع بعيد باستخدام git remote
.
$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
remotes/win32/master
remotes/win32/new-widgets
عند هذه النقطة, لقد تأزمت الأمور, حتى تشغيل gitk
لمعرفة ما يجري:
$ gitk --all &
نصائح أخرى
إذا كان لديك العديد من الفروع البعيدة التي تريد جلب في وقت واحد, هل:
$ git pull --all
الآن يمكنك الخروج في أي فرع كما تريد دون ضرب مستودع بعيد.
هذا باش السيناريو ساعدتني:
#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
فإنه سيتم إنشاء تتبع الفروع جميع الفروع البعيدة ، ما عدا سيد (التي ربما حصلت من استنساخ الأصلي الأوامر).أعتقد أنك قد لا تزال بحاجة إلى القيام
git fetch --all
git pull --all
للتأكد.
واحدة بطانة:
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
كالعادة:اختبار في الإعداد الخاص بك قبل النسخ rm-rf الكون كما نعرفهاعتمادات بطانة واحدة تذهب إلى المستخدم cfi
باستخدام --mirror
يبدو الخيار لنسخ remote
تتبع الفروع بشكل صحيح.ومع ذلك ، فإنه يضع مستودع كما العارية مستودع, لذلك عليك أن تتحول مرة أخرى إلى وضعها الطبيعي مستودع بعد ذلك.
git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch
المرجع: بوابة التعليمات:كيف يمكنني استنساخ مستودع مع جميع عن بعد تتبع الفروع ؟
يمكنك التبديل بسهولة إلى فرع دون استخدام الهوى "بوابة الخروج -ب somebranch المنشأ/somebranch" بناء الجملة.يمكنك فقط القيام به:
git checkout somebranch
بوابة تلقائيا فعل الشيء الصحيح:
$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'
بوابة سوف تحقق ما إذا كان فرع بنفس الاسم موجود في واحد بالضبط البعيد, وإذا كان كذلك, فإنه المسارات بنفس الطريقة كما لو كنت قد تحدد بشكل واضح أنه بعيد فرع.من بوابة الخروج رجل الصفحة من بوابة 1.8.2.1:
إذا <branch> لم يتم العثور ولكن هناك موجود تتبع فرع في بالضبط بعد واحد (نسميها <remote>) مع مطابقة اسم علاج كما أي ما يعادل
$ git checkout -b <branch> --track <remote>/<branch>
فيما يتعلق ،
$ بوابة الخروج -ب التجريبية المنشأ/تجريبية
باستخدام
$ git checkout -t origin/experimental
أو أكثر مطول ولكن من الأسهل أن نتذكر
$ git checkout --track origin/experimental
قد يكون أفضل ، حيث تتبع مستودع بعيد.
الجلب الذي تقومون به يجب أن تحصل على جميع الفروع البعيدة ، ولكن ذلك لن إنشاء فروع محلية لها.إذا كنت تستخدم gitk, يجب أن ترى البعيد فروع وصفها بأنها "أجهزة التحكم عن بعد/الأصل/dev" أو شيئا من هذا القبيل.
لإنشاء الفرع المحلي على أساس بعيد فرع تفعل شيئا مثل:
git checkout -b dev refs/remotes/origin/dev
والتي يجب أن تعود شيئا مثل:
Branch dev set up to track remote branch refs/remotes/origin/dev. Switched to a new branch "dev"
الآن, عندما كنت على ديف فرع "بوابة سحب" سيتم تحديث المحلية dev إلى نفس النقطة بعد dev فرع.علما أنه سيتم جلب كافة الفروع ، ولكن فقط سحب واحد كنت في أعلى الشجرة.
عندما تفعل "git clone git://الموقع" جميع فروع العلامات المنال.
من أجل العمل على رأس محدد عن بعد فرع افتراض أنه هو الأصل البعيد:
git checkout -b branch origin/branchname
استخدام الأسماء المستعارة.ولو لم تكن هناك أي مواطن بوابة واحد المتشددين ، يمكنك تحديد الخاصة بك كما
git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
ومن ثم استخدامه
git clone-branches
لماذا نرى فقط "ماستر"
git clone
تنزيل جميع البعيد البعيد الفروع ولكن لا يزال يعتبرها "عن بعد" ، على الرغم من الملفات الموجودة في المستودع.هناك استثناء واحد من هذه ، هو أن عملية الاستنساخ يخلق المحلية فرع يسمى "سيد" من جهاز التحكم عن بعد فرع يسمى "سيد".بشكل افتراضي ، git branch
فقط يظهر الفروع المحلية ، وهذا هو السبب كنت فقط انظر "الماجستير".
git branch -a
يظهر كل الفروع ، بما في ذلك الفروع عن بعد.
كيفية الحصول على الفروع المحلية
إذا كنت فعلا ترغب في العمل على فرع, ربما كنت سوف ترغب في "المحلية" نسخة منه.ببساطة إنشاء فروع من فروع بعيدة (دون التحقق منها وبالتالي تغيير محتويات دليل العمل), ، يمكنك أن تفعل ذلك من هذا القبيل:
git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree
في هذا المثال ، branchone
هو اسم الفرع المحلي كنت خلق على أساس origin/branchone
;إذا كنت ترغب بدلا من ذلك إنشاء فروع محلية مع أسماء مختلفة ، يمكنك القيام بذلك:
git branch localbranchname origin/branchone
بمجرد إنشاء الفرع المحلي, يمكنك أن ترى ذلك مع git branch
(تذكر أنك لا تحتاج -a
لمعرفة الفروع المحلية).
هذا ليس كثيرا معقدة بسيطة جدا ومباشرة إلى الأمام خطوات كما يلي ؛
git fetch origin
هذا سوف يجلب جميع الفروع البعيدة المحلية الخاصة بك.
git branch -a
هذا وسوف تظهر لك جميع الفروع البعيدة.
git checkout --track origin/<branch you want to checkout>
التحقق من ما إذا كنت في الفرع المطلوب عن طريق الأمر التالي;
git branch
إخراج مثل هذا ؛
*your current branch
some branch2
some branch3
لاحظ * الإشارة التي تدل الفرع الحالي.
متأخرا أفضل من أبدا, ولكن هنا هو أفضل طريقة للقيام بذلك:
mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard
عند هذه النقطة لديك نسخة كاملة من بعيد الريبو مع كل من هو في فروع (مع التحقق من git branch
).يمكنك استخدام --mirror
بدلا من --bare
إذا كان جهاز التحكم عن بعد الريبو لديها أجهزة التحكم عن بعد الخاصة بها.
فقط تفعل هذا:
$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
master
$ git branch -a
* branchxyz
master
remotes/origin/HEAD -> origin/master
remotes/origin/branchxyz
remotes/origin/branch123
ترى, 'git clone git://المثال.com/myprojectt' جلب كل شيء ، حتى في الفروع ، عليك فقط أن الخروج عليهم ، ثم الفرع المحلي الخاص بك سيتم إنشاؤه.
تحتاج فقط إلى استخدام "بوابة استنساخ" للحصول على جميع الفروع.
git clone <your_http_url>
حتى ولو كنت ترى سوى الماجستير فرع يمكنك استخدام "بوابة فرع مجموعة" لرؤية جميع الفروع.
git branch -a
و يمكنك التبديل إلى أي فرع من فروع التي لديك بالفعل.
git checkout <your_branch_name>
لا تقلق بعد "بوابة استنساخ" أنت لا تحتاج إلى الاتصال مع جهاز التحكم عن بعد الريبو ، "بوابة فرع" و "بوابة الخروج" يمكن تشغيلها بنجاح عند إغلاق واي فاي الخاص بك.إذا ثبت أن عند "بوابة استنساخ" ، فإنه بالفعل قد نسخ جميع فروع من بعيد الريبو.بعد ذلك, أنت لا تحتاج إلى جهاز التحكم عن بعد الريبو المحلي بالفعل جميع فروع' رموز.
A git clone
ومن المفترض أن نسخ كامل المستودع.محاولة استنساخ ومن ثم تشغيل git branch -a
.يجب أن قائمة جميع الفروع.ثم إذا كنت تريد أن تتحول إلى فرع "فو" بدلا من "سيد" ، استخدام git checkout foo
.
استخدام أداة بلدي git_remote_branch (تحتاج روبي المثبتة على الجهاز الخاص بك).انها بنيت خصيصا لجعل البعيد فرع التلاعب ميتة سهلة.
في كل مرة يفعل العملية نيابة عنك ، فإنه يطبع باللون الأحمر في وحدة التحكم.مع مرور الوقت ، وأخيرا عصا في الدماغ :-)
إذا كنت لا تريد grb لتشغيل الأوامر نيابة عنك فقط استخدام 'شرح' الميزة.الأوامر سيتم طباعة إلى وحدة التحكم الخاصة بك بدلا من تنفيذها لك.
أخيرا, جميع الأوامر الأسماء المستعارة ، لجعل تحفيظ أسهل.
لاحظ أن هذا هو برنامج ألفا ;-)
وهنا المساعدة عند تشغيل grb مساعدة:
git_remote_branch version 0.2.6 Usage: grb create branch_name [origin_server] grb publish branch_name [origin_server] grb rename branch_name [origin_server] grb delete branch_name [origin_server] grb track branch_name [origin_server] Notes: - If origin_server is not specified, the name 'origin' is assumed (git's default) - The rename functionality renames the current branch The explain meta-command: you can also prepend any command with the keyword 'explain'. Instead of executing the command, git_remote_branch will simply output the list of commands you need to run to accomplish that goal. Example: grb explain create grb explain create my_branch github All commands also have aliases: create: create, new delete: delete, destroy, kill, remove, rm publish: publish, remotize rename: rename, rn, mv, move track: track, follow, grab, fetch
كل الإجابات رأيت هنا صحيحة ولكن هناك الكثير من نظافة الطريق إلى استنساخ مستودع وسحب جميع فروع في آن واحد.
عند استنساخ مستودع جميع المعلومات من الفروع هو في الواقع تحميلها ولكن الفروع الخفية.مع الأمر
$ git branch -a
يمكنك عرض جميع فروع مستودع مع الأمر
$ git checkout -b branchname origin/branchname
يمكنك ثم "تحميل" يدويا في وقت واحد.
ومع ذلك ، عندما تريد استنساخ الريبو مع الكثير من الفروع في جميع الطرق هو موضح أعلاه هي طويلة و شاقة فيما يتعلق بكثير وأنظف وأسرع طريقة أنا ذاهب لتظهر ، على الرغم من انها معقدة بعض الشيء.تحتاج إلى ثلاث خطوات لتحقيق ذلك:
- الخطوة الأولى
إنشاء مجلد فارغ جديد على الجهاز الخاص بك و استنساخ مرآة نسخة .بوابة مجلد من مستودع:
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
مستودع داخل مجلد my_repo_folder لا تزال فارغة ، هناك فقط خفية .بوابة المجلد الآن يمكنك أن ترى مع "ls-alt" القيادة من المحطة.
- الخطوة الثانية
التبديل هذا المستودع من فارغة (العارية) مستودع العادية مستودع طريق تحويل قيمة منطقية "العارية" من بوابة تكوينات كاذبة:
$ git config --bool core.bare false
- الخطوة الثالثة
الاستيلاء على كل شيء داخل المجلد الحالي وخلق كل فروع على الجهاز المحلي ، ولذلك جعل هذا طبيعي الريبو.
$ git reset --hard
حتى الآن يمكنك فقط اكتب الأمر "بوابة فرع" و يمكنك أن ترى أن جميع فروع يتم تحميلها.
هذه هي الطريقة السريعة التي يمكنك استنساخ git مع جميع الفروع في وقت واحد ، ولكن انها ليست شيئا كنت تريد أن تفعل كل مشروع في هذا السبيل.
النظر في واحدة من الإجابات على السؤال لاحظت أنه من الممكن أن تختصر:
for branch in `git branch -r | grep -v 'HEAD\|master'`; do
git branch --track ${branch##*/} $branch;
done
ولكن حذار إذا كان أحد الفروع عن بعد هو اسمه مثلاadmin_master لن تحصل على تحميلها!
بفضل bigfish عن الفكرة الأصلية
الاستنساخ من الريبو لن تعمل مع بوابة استنساخ & git الجلب:الكثير من الفروع/العلامات ستبقى unfetched.
للحصول على نسخة مع جميع فروع والعلامات.
git clone --mirror git://example.com/myproject myproject-local-bare-repo.git
للحصول على نسخة مع جميع الفروع الكلمات ولكن أيضا مع نسخة العمل:
git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master
حسنا ، عند استنساخ الريبو الخاص بك, لديك جميع فروع هناك.
إذا كنت فقط تفعل git branch
, ، فهي نوع من مخبأة...
حتى إذا كنت ترغب في رؤية كل فروع الاسم فقط ببساطة إضافة --all
العلم مثل هذا:
git branch --all
أو git branch -a
إذا كنت مجرد الخروج إلى فرع ، يمكنك الحصول على كل ما تحتاجه.
ولكن ماذا عن إذا كان الفرع التي تم إنشاؤها من قبل شخص آخر بعد مستنسخ ؟
في هذه الحالة فقط لا:
git fetch
والتحقق من جميع فروع مرة أخرى...
إذا كنت ترغب في جلب والخروج في نفس الوقت, يمكنك القيام به:
git fetch && git checkout your_branch_name
أيضا خلق الصورة أدناه بالنسبة لك لتبسيط ما قلت:
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
git branch --track ${branch#remotes/origin/} $branch
done
هذه المدونة سيتم سحب جميع الفروع البعيدة رمز المحلية الريبو.
لـ نسخ ولصق في سطر الأوامر:
git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master
لمزيد من readibility:
git checkout master ;
remote=origin ;
for brname in `
git branch -r | grep $remote | grep -v master | grep -v HEAD
| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
git branch -D $brname ;
git checkout -b $brname $remote/$brname ;
done ;
git checkout master
هذا سوف:
- تحقق من سيد (حتى نتمكن من حذف فرع ونحن على)
- حدد البعيد إلى الخروج (تغييره إلى ما بعد لديك)
- حلقة من خلال كل فروع من بعيد باستثناء السيد رئيس
- حذف الفرع المحلي (حتى نتمكن من التحقق من قوة-تحديث فروع)
- تحقق من فرع من بعيد
- تحقق من ماستر (من أجل ذلك)
أنا في حاجة إلى القيام بالضبط نفس الشيء.هنا هو بلدي روبي البرنامج النصي.
#!/usr/bin/env ruby
local = []
remote = {}
# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
line.strip!
if /origin\//.match(line)
remote[line.gsub(/origin\//, '')] = line
else
local << line
end
end
# Update
remote.each_pair do |loc, rem|
next if local.include?(loc)
%x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]
كتبت هذه الصغيرة Powershell الوظائف أن تكون قادرة على الخروج كل بوابة الفروع التي هي في الأصل البعيد.
Function git-GetAllRemoteBranches {
iex "git branch -r" <# get all remote branches #> `
| % { $_ -Match "origin\/(?'name'\S+)" } <# select only names of the branches #> `
| % { Out-Null; $matches['name'] } <# write does names #>
}
Function git-CheckoutAllBranches {
git-GetAllRemoteBranches `
| % { iex "git checkout $_" } <# execute ' git checkout <branch>' #>
}
المزيد من بوابة الوظائف ويمكن الاطلاع على بلدي بوابة إعدادات الريبو
بوابة عادة (عند غير محدد) جلب كافة فروع و/أو العلامات (الحكام ، انظر: git ls-refs
) من واحد أو أكثر من مستودعات أخرى جنبا إلى جنب مع الكائنات اللازمة لاستكمال تاريخهم.وبعبارة أخرى أنه جلب الأشياء التي لا يمكن الوصول إليها من قبل الكائنات التي يتم تحميلها بالفعل.انظر: ماذا git fetch
حقا ؟
في بعض الأحيان قد يكون الفروع/العلامات التي لا ترتبط مباشرة إلى المرحلة الحالية ، لذلك git pull --all
/git fetch --all
لن يساعد في هذه الحالة ، ولكن يمكنك أن قائمة لهم من قبل:
git ls-remote -h -t origin
وجلب لهم يدويا من خلال معرفة المرجع الأسماء.
لذلك جلب كل منهم, حاول:
git fetch origin --depth=10000 $(git ls-remote -h -t origin)
على --depth=10000
المعلمة قد تساعد إذا كنت قد shallowed مستودع.
ثم التحقق من كل ما تبذلونه من فروع مرة أخرى:
git branch -avv
إذا كان أعلاه لن يساعد تحتاج إلى إضافة عداد المفقودين فروع يدويا تتبع قائمة (كما ضاعت بطريقة أو بأخرى):
$ git remote -v show origin
...
Remote branches:
master tracked
قبل git remote set-branches
مثل:
git remote set-branches --add origin missing_branch
لذلك قد تظهر تحت remotes/origin
بعد جلب:
$ git remote -v show origin
...
Remote branches:
missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
* [new branch] missing_branch -> origin/missing_branch
استكشاف الأخطاء وإصلاحها
إذا كنت لا تزال لا يمكن الحصول على أي شيء آخر غير الفرع الرئيسي ، تحقق مما يلي:
- الاختيار المزدوج أجهزة التحكم عن بعد (
git remote -v
) مثلا- التحقق من أن
git config branch.master.remote
هوorigin
. - تحقق مما إذا كان
origin
يشير إلى عنوان URL الصحيح عن طريق:git remote show origin
(انظر هذا بعد).
- التحقق من أن
أيا من هذه الإجابات قطع عليه ، باستثناء المستخدم لا أحد على الطريق الصحيح.
كنت أعاني من مشكلة مع تحريك الريبو من ملقم واحد/نظام إلى آخر.عندما المستنسخة الريبو فقط إنشاء الفرع المحلي للحصول على الماجستير حتى عندما دفعت إلى البعيد فقط ماجستير فرع دفعت.
لذا وجدت هاتين الطريقتين مفيدة جدا.نأمل أنها تساعد شخص آخر.
الأسلوب 1:
git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo
الطريقة 2:
git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo
استخدام الأوامر التي يمكنك تذكر
أنا باستخدام Bitbucket, مستودع خدمة استضافة من Atlassian.لذلك أنا أحاول أن اتبع مستندات.وأن يعمل تماما بالنسبة لي.التالية سهلة وقصيرة الأوامر يمكنك الخروج عن طريق الفرع.
في أول استنساخ المستودع الخاص بك ، ثم التغيير إلى المجلد الوجهة.وأخيرا وليس آخرا الجلب و الدفع:
git clone <repo> <destination_folder>
cd <destination_folder>
git fetch && git checkout <branch>
هذا هو.هنا ليت مزيد من العالم الحقيقي سبيل المثال:
git clone https://username@bitbucket.org/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop
سوف تجد معلومات تفصيلية عن الأوامر في المستندات:استنساخ الأمر, الأمر الجلب, الخروج الأوامر
اعتبارا من مطلع عام 2017 ، الجواب في هذا التعليق يعمل:
git fetch <origin-name> <branch-name>
يجلب فرع لك.في حين أن هذا لا سحب جميع فروع في آن واحد ، يمكنك متفرد تنفيذ هذا لكل فرع.
هنا هو آخر واحد قصير-بطانة الأمر الذي يخلق الفروع المحلية لجميع الفروع عن بعد:
(git branch -r | sed -n '/->/!s#^ origin/##p' && echo master) | xargs -L1 git checkout
كما أنها تعمل بشكل صحيح إذا تتبع فروع محلية تم إنشاؤها بالفعل.يمكنك تسميتها بعد أول git clone
أو في أي وقت لاحق.
إذا كنت لا تحتاج إلى أن يكون master
فرع سحبه بعد الاستنساخ ، استخدام
git branch -r | sed -n '/->/!s#^ origin/##p'| xargs -L1 git checkout
git clone --mirror
على الأصل الريبو يعمل بشكل جيد على هذا.
git clone --mirror /path/to/original.git
git remote set-url origin /path/to/new-repo.git
git push -u origin