Tworzenie nowej pustej gałęzi dla nowego projektu

Używamy repozytorium git do przechowywania naszego projektu. Nasze oddziały odchodzą od pierwotnego oddziału. Ale teraz chcemy stworzyć mały nowy projekt, aby śledzić dokumentację. W tym celu chcielibyśmy utworzyć nową pustą gałąź, aby rozpocząć przechowywanie naszych plików, I chciałbym, aby inni użytkownicy sieci sklonowali tę gałąź.

Jak możemy to zrobić? Próbowałem kilku rzeczy, ale nie zadziałały.
$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

Wydaje się, że popycha gałąź ok, ale kiedy Robię fetch lub pull, pobiera informacje z innych gałęzi, a następnie dostaję dodatkowe pliki z innych projektów. Jakie jest najlepsze rozwiązanie?

Author: TheTechRobo36414519, 2012-12-20

8 answers

Możesz utworzyć gałąź jako sierota:

git checkout --orphan <branchname>

To stworzy nową gałąź bez rodziców. Następnie możesz wyczyścić katalog roboczy za pomocą:

git rm --cached -r .

I dodać pliki dokumentacji, zatwierdzić je i wypchnąć do github.

Pull or fetch zawsze aktualizuje lokalne informacje o wszystkich odległych gałęziach. Jeśli chcesz pobrać / pobrać informacje tylko dla jednej zdalnej gałęzi, musisz je określić.

 711
Author: Hiery Nomus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 23:44:34

Poprawną odpowiedzią jest utworzenie orphan branch. Wyjaśniam jak to zrobić szczegółowo na moim blogu.(link zarchiwizowany)

...

Przed uruchomieniem, zaktualizuj GIT do najnowszej wersji. Aby upewnić się używasz najnowszej wersji, uruchom

which git

Jeśli wypluwa starą wersję, być może będziesz musiał rozszerzyć swoją ścieżkę o folder zawierający właśnie zainstalowaną wersję.

Ok, jesteśmy gotowi. Po zrobieniu płyty cd do folder zawierający Twój git / align = "left" / W tym przykładzie podam oddział "mybranch".
git checkout --orphan mybranch

Usuń wszystko z gałęzi orphan

git rm -rf .

Wprowadzić pewne zmiany

vi README.txt

Dodawanie i zatwierdzanie zmian

git add README.txt
git commit -m "Adding readme file"

To jest to. If you run

git log

Zauważysz, że historia zmian zaczyna się od zera. To switch wróć do gałęzi master, po prostu uruchom

git checkout master

Możesz wrócić do orphan branch by running

git checkout mybranch
 72
Author: Sid Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-18 14:40:29

Utwórz pustą nową gałąź w ten sposób:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

Jeśli Twoje pliki proj-doc są już w commicie pod jednym poddirem, możesz utworzyć nową gałąź w ten sposób:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

Co może być wygodniejsze niż git branch --orphan, Jeśli zostawiłoby ci to wiele git rm i git mv do zrobienia.

Spróbuj

git branch --set-upstream proj-doc origin/proj-doc

I zobacz, czy to pomoże z Twoim zbyt dużym problemem. Ponadto, jeśli naprawdę chcesz pobrać tylko jedną gałąź, najbezpieczniej jest podać ją w wierszu poleceń.

 12
Author: jthill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-20 23:25:10

Jeśli Twoja wersja git nie posiada opcji --orphan, należy użyć tej metody:

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

Po wykonaniu jakiejś pracy:

git add -A
git commit -m <message>
git push origin <newbranch>
 8
Author: cyb0k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-18 14:33:12

Załóżmy, że masz master gałąź z plikami / katalogami:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

Krok po kroku jak zrobić pustą gałąź:

  1. git checkout —orphan new_branch_name
  2. upewnij się, że jesteś we właściwym katalogu przed wykonaniem następującego polecenia:
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

W Kroku 2 po prostu usuwamy wszystkie pliki lokalnie, aby uniknąć pomyłki z plikami w nowej gałęzi i tymi trzymaj się w master branch. Następnie odłączamy wszystkie te pliki w kroku 3. Wreszcie, Krok 4 i Później pracują z naszą nową pustą gałęzią.

Gdy skończysz, możesz łatwo przełączać się między gałęziami:

git checkout master 
git checkout new_branch
 7
Author: user1723157,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-08 23:13:16

Na podstawie tej odpowiedzi od Hiery Nomus .

Możesz utworzyć gałąź jako sierota:

git checkout --orphan <branchname>

To stworzy nową gałąź bez rodziców. Następnie możesz wyczyścić katalog roboczy za pomocą:

git rm --cached -r .

A potem po prostu Zatwierdź gałąź z pustym zatwierdzeniem i wciśnij

git commit -m <commit message> --allow-empty
git push origin <newbranch>
 3
Author: Liner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-19 12:42:09

Znalazłem tę pomoc:

git checkout --orphan empty.branch.name
git rm --cached -r .
echo "init empty branch" > README.md
git add README.md
git commit -m "init empty branch"
 3
Author: 齐化恒,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-10 07:17:24

Najlepszym rozwiązaniem jest utworzenie nowej gałęzi z opcją --orphan Jak pokazano poniżej

git checkout --orphan <branch name>

Dzięki temu będziesz mógł utworzyć nowy oddział i bezpośrednio do niego przejść. To będzie gałąź bez rodziców.

Domyślnie opcja --orphan nie usuwa plików w katalogu roboczym, więc możesz usunąć pliki w katalogu roboczym przez to:

git rm --cached -r

W szczegółach co robi --orphan:

--orphan <new_branch>
Tworzenie nowej gałęzi orphan o nazwie <new_branch>, zaczęło się od <start_point> i przełączyło się na nią. Pierwszy commit zrobiony na tej nowej gałęzi nie będzie miał rodziców i będzie korzeniem nowej historii całkowicie odłączonym od wszystkich pozostałych gałęzi i commitów.

Indeks i drzewo robocze są dopasowane tak, jakbyś wcześniej uruchomił git checkout . Pozwala to na rozpoczęcie nowej historii, która rejestruje zestaw ścieżek podobnych do przez łatwe uruchomienie git commit-a, aby wprowadzić commit główny.

To może być przydatne kiedy chcesz opublikować drzewo z commita bez ujawniania jego pełnej historii. Możesz chcieć to zrobić, aby opublikować gałąź open source projektu, którego obecne drzewo jest "czyste", ale którego pełna historia zawiera zastrzeżone lub w inny sposób obciążone bity kodu.

Jeśli chcesz uruchomić historię rozłączoną, która rejestruje zestaw ścieżek, który jest zupełnie inny niż ścieżka , powinieneś wyczyścić indeks i działające drzewo zaraz po utworzeniu orphan branch uruchamiając git rm-rf . z najwyższego poziomu drzewa roboczego. Następnie będziesz gotowy przygotować nowe pliki, ponownie zaludnić działające drzewo, kopiując je z innego miejsca, wydobywając tarball, itp.

 3
Author: Kamal Hossain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-24 09:47:40