настройка Git для одного разработчика?
мне часто нужно разрабатывать вещи на дороге, без подключения к интернету / сети. Я только один разработчик, поэтому до сих пор у меня просто был репозиторий SVN на моей машине и сделал проверку на моем ноутбуке, когда я ушел. Проблема: это не дает мне никакого контроля источника на дороге.
поэтому я попробовал перейти на git, который, кажется, делает то, что я хочу, но я не уверен, что правильно понимаю, как он должен использоваться в моем установка.
по сути:
- создал репозиторий на myservershareproject с помощью
git init
- клонировал этот репозиторий на машину 1 с помощью
git clone
- клонировал этот репозиторий на машину 2 с помощью
git clone
- работал на машине 2, используя
git commit
для фиксации любых изменений в моем локальном репозитории - наконец-то использовать
git push
чтобы вернуть все изменения в myservershareprohect - используется
git pull
на машина 1 для получения новейших изменений из myservershareproject
работает, а git push
команда дает мне предупреждение о том, что нажатие выделенной ветви не поддерживается, поскольку это может запутать индекс. Теперь я смущен, потому что сообщение также было написано серьезным тоном, что означает, что я должен его уважать (и действительно, gitk показывает, что у меня теперь есть две ветви: master и remotes/origin/master), но я не полностью понимаю терминологию еще.
каковы были бы правильные шаги в моей ситуации?
- я всегда буду работать только на машине 1 или машине 2, никогда на обоих
- я намерен использовать ветвление как способ иметь отдельную ветвь для исправлений/тестов (так же, как и обычным способом), но не как способ иметь несколько разработчиков
- я действительно хочу использовать его в качестве альтернативы rsync my SVN.
Edit: есть две странности. Первый-если Я просто меняю файл, он говорит "изменен, но не обновлен". что странно:
# 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:///myservershareproject
129649b..1f4b957 master -> master
поэтому он говорит мне, что" толкать в текущую ветку " не рекомендуется, но я действительно не понимаю, как это правильно сделать.
3 ответов
в противном случае кажется хорошим, но чтобы избежать сообщения об ошибке, вы можете настроить репозиторий "upstream" как пустое РЕПО, т. е. тот, который не включает извлеченную копию. Вы делаете это с
git --bare init
посмотреть например, в этом примере
на 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
вместо тега .
в противном случае, вы можете редактировать .git/config
и добавить:
[push]
default = matching
это позволит вам просто git push
, и Git будет нажимать на удаленную ветвь локальной ветви, в которой вы находитесь в настоящее время. Например, если вы в данный момент находитесь в branch master
, git push
подтолкнет локальную главную ветвь к удаленной главной ветви.
как было заявлено janneb, вам придется использовать голый репозиторий чтобы толкнуть его без предупреждения. Проблема с нажатием на обычный (не голый) репозиторий заключается в том, что основной владелец (конкретного "нормального" репозитория) не будет хотеть изменений, добавленных в его/ее репозиторий. В то время, если кто-то нажимает на этот репозиторий и удаляет ветку (или любые другие изменения), владелец не ожидал такого изменения. Таким образом, предупреждение.
у вас, похоже, есть хорошие ответы на ваш главный вопрос, поэтому я займусь этим:
... если я просто изменяю файл, он говорит "изменен, но не обновлен". что странно ...
Git, в отличие от любая другая система контроля версий когда-либо, требует явного действия пользователя для включения измененных файлов в набор вещей, которые будут зафиксированы далее. Вы должны сказать
$ git add <your modified files>
после редактирование и до делаешь git commit
. У меня сложилось впечатление, что это облегчает выборочное совершение только некоторых ваших модификаций.
Если вы сделаете "git add", а затем измените файлы, вам нужно снова сделать" git add", или он будет только фиксировать изменения до точки первого"git add".
есть короткий путь,git commit -a
, который делает более или менее то, что делают другие операции "фиксации" VCSes. Я говорю "более или менее", потому что я не уверен, что это точная совпадение во всех случаях. Единственное расхождение, о котором я знаю, - некоторые старые версии git добавят все ваши измененные файлы и все ваши новые файлы, а затем commit; это было исправлено в текущей версии, но я все еще не совсем доверяю этой вещи.