Искам да мога да направя следното:
Създаване на локален клон на базата на друг (отдалечен или локален) клон (чрез git branch
или git checkout -b
)
Изтеглете локалния клон
в отдалеченото хранилище (публикувайте), но го направете
проследимост, така че git pull
и git push
да работят веднага.
Как да направя това?
Знам за --set-upstream
в Git 1.7, но това е действие след създаването. Искам да намеря начин да направя подобна промяна при избутването на клона в отдалеченото хранилище.
Преди въвеждането на git push -u
нямаше опция git push
, с която да получите желаното. Трябваше да се добавят нови конфигурационни изявления.
Ако създадете нов клон с помощта на:
$ git checkout -b branchB
$ git push origin branchB:branchB
Можете да използвате командата git config
, за да избегнете директното редактиране на файла .git/config
.
$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB
Или можете да редактирате ръчно файла .git/config
, за да имате информация за проследяване на този клон.
[branch "branchB"]
remote = origin
merge = refs/heads/branchB
Предполагам, че вече сте клонирали проект като:
git clone http://github.com/myproject.git
След това в локалното си копие създайте нов клон и го проверете:
git checkout -b <newbranch>
Ако предположим, че сте направили "git bare --init" на вашия сървър и сте създали myapp.git, трябва:
git remote add origin ssh://example.com/var/git/myapp.git
git push origin master
След това потребителите трябва да могат да
git clone http://example.com/var/git/myapp.git
Забележка: Предполагам, че сървърът ви е пуснат и работи. Ако не е, това няма да работи. Добър ръководство е тук.
Добавяне на отдалечен клон:
git push origin master:new_feature_name
Проверете дали всичко е наред (извличане на произхода и списък на отдалечените клонове):
git fetch origin
git branch -r
Създайте местен клон и проследете отдалечения клон:
git checkout -tb new_feature_name origin/new_feature_name
Актуализирайте всичко:
git pull
редактиране Остарял, просто използвайте git push -u origin $BRANCHNAME
Използвайте git publish-branch
от William's miscellaneous Git tools (gitorious repo и clone).
Добре, няма Ruby, така че - пренебрегване на предпазните мерки! - вземете последните три реда от скрипта и създайте скрипт на bash, git-publish-branch
:
#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}
След това стартирайте git-publish-branch REMOTENAME BRANCHNAME
, където REMOTENAME обикновено е origin (можете да модифицирате скрипта, за да вземете origin по подразбиране и т.н.)