2013-05-18 2 views
-3

Мне нравится практиковать Git на моем локальном компьютере, что лучший способ сделать это. Я думал о создании двух учетных записей пользователей Windows, двух репозиториев (по одному для каждого пользователя), и mimic remote repository - все на моем локальном компьютере.Learning Git Best Practices

У меня нет локальной сети, но у меня есть доступ в Интернет. Я особенно заинтересован в разрешении конфликтов тяг, работающих в нескольких ветвях и т. Д.

Пожалуйста, поделитесь своими мыслями и опытом, чтобы узнать Git.

+0

Используйте битбакет как удаленный репозиторий, он бесплатный. Тогда у вас может быть две копии на вашем компьютере ... – sashkello

+2

Лучший способ узнать - это просто rtfm, но наверняка не задавайте такие вопросы на форумах. –

+0

git не может быть осуществлен – prusswan

ответ

1

У меня есть это в моем .bash_aliases файле:

alias gitlearn='cd; rm -rf gitlearn; mkdir gitlearn; cd gitlearn; git init; git commit --allow-empty -m"Add empty, initial commit"' 

Каждый раз, когда я хочу, чтобы изучить или попрактиковаться с мерзавцем, я просто введите gitlearn, и я в ~/gitlearn/ со свежей репо, и первым пустой commit, что позволяет переустановить ваш первый фактический фиксатор, так как вам нужно указать фиксацию до первой фиксации, которую вы хотите переместить при перезагрузке.

Затем я просто использую командные команды linux, чтобы быстро выполнить любую настройку, в которой я нуждаюсь. Я тестировал стратегии ветвления и слияния, чередуя коммиты (соблюдая даты) полностью независимых друг от друга, не связанных между собой репозиториев в новой, общей концепции третьего репо, концепции тестовой ветви, изучал, что происходит с выходом git log --graph с действительно сумасшедшими слияниями, с командами (например, ужасными filter-branch) на временных клонах и даже выяснил, что на самом деле требуется (которое вы можете создать для себя), чтобы иметь действительное git-репо.

Отправляясь в пустом каталоге:

~/gitlearn$ ls .git 
ls: cannot access .git: No such file or directory 
~/gitlearn$ git st 
fatal: Not a git repository (or any parent up to mount point /home/gfixler) 
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 

Это все, что вам нужно сделать GIT репозиторий:

~/gitlearn$ mkdir -p .git/objects .git/refs 
~/gitlearn$ echo 'ref: refs/heads/master' >.git/HEAD 
~/gitlearn$ git st 
# On branch master 
# 
# Initial commit 
# 
~/gitlearn$ tree .git 
.git 
|-- HEAD 
|-- objects 
`-- refs 

2 directories, 1 file 

Я буду делать такие вещи, как это:

~/gitlearn$ echo something >afile 
~/gitlearn$ git add afile 
~/gitlearn$ git st 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: afile 
# 
~/gitlearn$ git commit -m'Add something to afile' 
[master 3f78112] Add something to afile 
1 file changed, 1 insertion(+) 
create mode 100644 afile 
~/gitlearn$ echo another thing >>afile 
~/gitlearn$ git diff 
diff --git a/afile b/afile 
index deba01f..fa8eba8 100644 
--- a/afile 
+++ b/afile 
@@ -1 +1,2 @@ 
something 
+another thing 
~/gitlearn$ git add --update . 
~/gitlearn$ git commit -m'Add another thing to afile' 
[master 5c639d9] Add another thing to afile 
1 file changed, 1 insertion(+) 
~/gitlearn$ git checkout -b feature 
Switched to a new branch 'feature' 
~/gitlearn$ echo >>afile 
~/gitlearn$ echo feature 1 >>afile 
~/gitlearn$ git diff 
diff --git a/afile b/afile 
index fa8eba8..be87597 100644 
--- a/afile 
+++ b/afile 
@@ -1,2 +1,4 @@ 
something 
another thing 
+ 
+feature 1 
~/gitlearn$ git add --update . 
~/gitlearn$ git ci -m'Add feature 1 to afile' 
[feature 25b20ab] Add feature 1 to afile 
1 file changed, 2 insertions(+) 
~/gitlearn$ git log --all --graph --decorate --oneline 
* 25b20ab (HEAD, feature) Add feature 1 to afile 
* 5c639d9 (master) Add another thing to afile 
* 3f78112 Add something to afile 
* 70e28a0 Add empty, initial commit 
~/gitlearn$ 

и т. Д., Пока я не пойму понятие. Это такой быстрый способ экспериментировать. Я использую также много псевдонимов, которые ускоряют его еще больше, и, например, с git add --update . Я просто наберу git add --u<TAB> ., поэтому большинство команд имеют тенденцию быть менее 15 нажатий клавиш.

Я рекомендовал это нескольким людям сейчас. Это был действительно отличный способ быстро приспособиться к основам, а в последнее время - к более глубоким внутренним функциям git.

Что касается пультов, я имитирую их все время локально.mkdir remote.git; cd remote.git; git init --bare; cd ..; git clone remote.git local; cd local, и теперь вы находитесь в «локальном» репо, которое думает об одном в «remote.git» как о его происхождении. Здесь нет никакой разницы в типичных настройках, за исключением того, что голый «remote.git» на самом деле находится на вашем локальном диске. Внутри «локального» вы можете нажимать, извлекать и извлекать из «remote.git», и он будет функционально таким же, как то, что вы делаете между локальным и физически удаленным репо.

+0

Гэри, вы дали очень полезные команды, в частности, с дистанционным и локальным на той же машине. Не могли бы вы объяснить, можно ли вносить изменения в удаленный доступ (какая локальная установка) в качестве двух разных пользователей, если это возможно, то как мы можем это сделать? Нужно ли настраивать этих пользователей в соответствующем файле .git/config? –

+0

Да. Пример: 'mkdir central; cd центральный; git init; git commit --allow-empty -m'Add initial, empty commit '; CD ..; git clone - центральный; rm -rf центральный; git clone central.git user1; git clone central.git user2; cd user1; git config --local user.name user1; git config --local user.email user1 @ company; cd ../user2; git config --local user.name user2; git config --local user.email user2 @ company; cd ..', то вы можете работать в 'user1 /' и 'user2 /' как отдельные пользователи, каждый нажав и потянув их в репозиторий 'central.git' sibling. Эти строки 'git config -local' редактируют каждый' .git/config' для вас. –

4

Вы можете создать первый репозиторий на вас файловой системы (скажем, вы называете его origin) и запустить внутрь:

git init --bare 

Тогда вы можете сделать первый клон с:

git clone origin clone1 

и А вторые:

git clone origin clone2 

Затем вы можете совершать, толкать и тянуть каждый клон, чтобы тренироваться.