git setup для одного разработчика? - PullRequest
12 голосов
/ 27 июня 2009

Мне часто нужно разрабатывать вещи в дороге, без подключения к интернету / сети. Я всего лишь один разработчик, поэтому до сих пор у меня просто был SVN-репозиторий на моей машине, и я ушел на мой ноутбук, когда ушел. Проблема: это не дает мне контроля версий в дороге.

Итак, я попытался перейти на git, который, кажется, делает то, что я хочу, но я не уверен, что правильно понимаю, как он должен использоваться в моей установке.

По существу:

  • Создан репозиторий на \ myserver \ share \ project с использованием git init
  • Клонировал этот репозиторий на машину 1, используя git clone
  • Клонировал этот репозиторий на машину 2, используя git clone
  • Работал на машине 2, используя git commit для фиксации любых изменений в моем локальном репозитории
  • Наконец использовал git push, чтобы отправить все изменения обратно в \ myserver \ share \ prohect
  • Используется git pull на компьютере 1 для получения новейших изменений из \ myserver \ share \ project

Это работает, но команда git push дает мне предупреждение о том, что нажатие на извлеченную ветвь не поддерживается, поскольку это может привести к путанице в индексе. Теперь я запутался, потому что сообщение также было написано серьезным тоном, что означает, что я, возможно, должен почитать его (и, действительно, gitk показывает, что у меня теперь есть две ветви: master и remotes / origin / master), но я пока не до конца понимаю терминологию.

Каковы были бы правильные шаги в моей ситуации?

  • Я буду работать только на машине 1 ИЛИ на машине 2, но никогда не на обеих
  • Я намерен использовать ветвление как способ иметь отдельную ветвь для исправлений / тестов (как обычно), но не как способ иметь несколько разработчиков
  • Я действительно хочу использовать его как альтернативу rsync моей SVN.

Редактировать: Есть две странности. Первый - если я просто изменяю файл, он говорит: «Изменен, но не обновлен». что странно:

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   myproject/Readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Второе сообщение, которое я считаю виновным, вывод git push:

warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches (default)
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 333 bytes, done.
Total 4 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
warning: updating the current branch
warning: Updating the currently checked out branch may cause confusion,
warning: as the index and work tree do not reflect changes that are in HEAD.
warning: As a result, you may see the changes you just pushed into it
warning: reverted when you run 'git diff' over there, and you may want
warning: to run 'git reset --hard' before starting to work to recover.
warning:
warning: You can set 'receive.denyCurrentBranch' configuration variable to
warning: 'refuse' in the remote repository to forbid pushing into its
warning: current branch.
warning: To allow pushing into the current branch, you can set it to 'ignore';
warning: but this is not recommended unless you arranged to update its work
warning: tree to match what you pushed in some other way.
warning:
warning: To squelch this message, you can set it to 'warn'.
warning:
warning: Note that the default will change in a future version of git
warning: to refuse updating the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.
To file:///\\myserver\share\project
   129649b..1f4b957  master -> master

Так что это говорит мне, что "вставлять в текущую ветку" не рекомендуется, но я не совсем понимаю, каков правильный способ сделать это.

Ответы [ 3 ]

10 голосов
/ 27 июня 2009

В остальном кажется хорошим, но чтобы избежать сообщения об ошибке, вы можете настроить «восходящий» репозиторий как пустой репозиторий, то есть тот, который не содержит извлеченную копию. Вы делаете это с

git --bare init

См. например. этот пример

8 голосов
/ 27 июня 2009

Команда git push требует, чтобы вы указали refspec, иначе вам придется отредактировать .git/config, чтобы указать действие по умолчанию в случае, если никакие refspecs не были указаны. Например, рассмотрим сценарий, в котором у вас есть ветвь с именем master.

Для нажатия на ветку master вы:

git push refs/heads/master:refs/heads/master
git push master:master
git push master

Все вышеперечисленное одинаково. Refspec, похожий на путь, является наиболее однозначным способом указать refspec. Таким образом, вы можете быть уверены, что ссылаетесь на ветку с именем master вместо тега с именем master.

В противном случае вы можете отредактировать .git/config и добавить:

[push]
    default = matching

Это позволит вам просто набрать git push, и Git отправит в удаленную ветку локальной ветки, в которой вы находитесь. Например, если вы в данный момент находитесь в ветке master, git push вытолкнет локальную ветку. главная ветка к удаленной главной ветке.

Как было сказано janneb, вам придется использовать пустой порядок репозитория, чтобы протолкнуть его без предупреждения. Проблема с переносом в нормальное (не пустое) хранилище заключается в том, что основной владелец (конкретного "обычного" хранилища) не будет хотеть изменений, добавленных в его / ее хранилище. В то же время, если кто-то добавит этот репозиторий и удалит ветку (или любые другие изменения), владелец не будет ожидать такого изменения. Таким образом, предупреждение.

0 голосов
/ 18 октября 2010

У вас, кажется, есть хорошие ответы на ваш главный вопрос, поэтому я займусь этим:

... если я просто изменяю файл, он говорит: «Изменен, но не обновлен». что странно ...

Git, в отличие от любой другой системы управления версиями, когда-либо , требует явного действия пользователя для включения измененных файлов в набор вещей, которые будут зафиксированы следующим. Вы должны сказать

$ git add <your modified files>

после редактирования их и до выполнения git commit. У меня сложилось впечатление, что это облегчает выборочную фиксацию только некоторых ваших модификаций.

Если вы выполните команду «git add», а затем измените файлы, вам придется снова выполнить «git add», иначе изменения будут зафиксированы только до момента первого «git add».

Существует ярлык, git commit -a, который делает более или менее то же, что и другие операции VCS "commit". Я говорю «более или менее», потому что я не уверен, что это точное совпадение во всех случаях. Единственное расхождение, о котором я знаю, это то, что некоторые старые версии git добавляли все ваши измененные файлы и все ваши новые файлы, а затем фиксировали; это было исправлено в текущей версии, но я до сих пор не совсем верю в это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...