Lokalne commity a zdalne repo

Wątek przeniesiony 2020-05-03 22:31 z Off-Topic przez somekind.

PP
PP
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Siemka,

Robię lokalne git commity na masterze załóżmy jest ich 10.
Potem chciałbym wysłać to na zdalne repo github.

Czy jak ktoś wejdzie na github to będzie mógł podejrzeć jak wyglądał kod załóżmy z 3 lokalnego commitu, czy może widzi tylko ostatnią wersję kodu i nie da się spojrzeć w historię bo widać to jako 1 commit?

edytowany 4x, ostatnio: Patryk27
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

Jeśli masz publiczne repo, każdy może spojrzeć w historię.


PP
PP
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:10
0

Ok, chciałbym się jeszcze upewnić:
Wiem że każdy mógłby spojrzeć w historię gdybym robił 1 commit lokalny = 1 push na github.
Ale w tym przypadku chciałbym zrobić 10 commitów lokalnych = 1 push.
Wtedy chyba nie będzie widać jak wyglądała praca między 1 commitem lokalnym, a 9 commitem lokalnym? (bo będzie widać tylko 10-ty)

edytowany 1x, ostatnio: PanPomidor
BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
2

Można zrobić rebase interactive squash albo soft reset wstecz ile chcesz i jeden wspólny commit - dopiero wtedy push z taką pseudo historią.

Jeszcze taki pomysł...

Możesz postawić sobie 2 konta na GitHub, jedno "oficjalne" drugie "prywatne".
Robisz fork z oficjalnego na prywatne
clone repo z konta prywatnego
dodajesz remote upsteram oficjalne
nowy branch np. feature-1 i tam robisz co chcesz i jak chcesz i w ilu krokach - nikt tego nie zobaczy
tworzysz pull request z prywatnego na oficjalny
na oficjalnym merge z opcją squash
na prywatnym kasujesz branch feature-1

Finalnie na Oficjalnym widzą tylko ostateczne efekty w jednym "skondensowanym" commit

Jest w tym pewna niedogodność, bo
Make this repository private
Public forks can’t be made private. Please duplicate the repository.

https://help.github.com/en/github/setting-up-and-managing-your-github-profile/publicizing-or-hiding-your-private-contributions-on-your-profile


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
edytowany 1x, ostatnio: BraVolt
Patryk27
Po co dwa konta? Prościej przecież założyć drugie repozytorium (na tym samym koncie).
BraVolt
Gdy coś ma być specjalnie wydzielone, przeznaczone na widok publiczny, a reszta na prywatnie to IMO 2 różne konta do zupełnie różnych celów są OK. Z kontami email tak mam, czemu nie z githubem? Nic to nie kosztuje.
Patryk27
Podobnie nic nie kosztuje założenie osobnego, prywatnego repozytorium; a w zasadzie jest nawet tańsze, bo nie trzeba się z tym tak dużo certolić :-P
BraVolt
Certolenia zero, różne repo nie plączą się pod nogami, siedzą grzecznie posegregowane na kontach: publiczne & prywatne
Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 godziny
2
PanPomidor napisał(a):

Wtedy chyba nie będzie widać jak wyglądała praca między 1 commitem lokalnym, a 9 commitem lokalnym? (bo będzie widać tylko 10-ty)

Na większości serwisów (Github/Gitlab/Bitbucket) widzisz domyślne najnowszy kod, ale nic nie stoi na przeszkodzie, by wyklikać zmiany pomiędzy dwoma dowolnymi commitami. Po z klonowaniu repozytorium na lokalny dysk podobnie możesz podejrzeć zmiany w konsoli pomiędzy dowolnymi commitami:

Kopiuj
git diff hash-commit-1 hash-commit-2

To samo właśnie dzieje się we wspomnianych serwisach, tylko wyświetlane zmiany są opakowane w HTML i przyozdobione CSS-em.

edytowany 1x, ostatnio: Pyxis
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

Ale w tym przypadku chciałbym zrobić 10 commitów lokalnych = 1 push.

Commit to commit - liczba puszów na nic nie wpływa (chyba że w ogóle nie wyślesz zmian na serwer).


edytowany 1x, ostatnio: Patryk27
BraVolt
git reset --soft HEAD~10
BraVolt
git commit -am"my condensed commit"
BraVolt
git push origin feature-1
BraVolt
Chyba, że chcesz lokalnie utrzymać cząstkowe commity, to wtedy odpada
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
5
  1. Piszesz kod na branchu
  2. Jak chcesz wreszcie wypchnąć na mastera to robisz squash and merge a branch dropujesz
  3. Na masterze widać tylko ten jeden merge w całości, brancha nie ma.
  4. Profit!

Tak sie zresztą robi "w prawdziwym życiu", bo nikogo na masterze nie obchodzi twoje 17 commitów z poprawkami do code review, ważny jest tylko commit z całym ficzerem.

Można ofc robić jakieś cuda na kiju w stylu reset soft, jeden zbiorczy commit a potem push force, ale to jakieś dziwne rzeczy i tylko w swoim prywatnym repo mógłbyś tak cudować.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 5x, ostatnio: Shalom
Pyxis
Mam wrażenie, że autor dostał to, co chciał usłyszeć, zatwierdził odpowiedź i sobie poszedł. To że nikogo nie obchodzi 17 ostatnich commitów z poprawkami, nie znaczy że nie można ich odkopać. Jeśli w którymś commicie pojawiły się dane wrażliwe, to będą one zawsze do odzyskania.
somekind
Z serwera? Jak?
KamilAdam
Tez sie zdziwilem ale bitbucket pokazuje moje usuniete commity. Znajac hasha mozna sie na niego przełączyć. Pytanie tylko jak odnaleźć hasha gdy go nie znamy
somekind
No jeśli widzi commity, to znaczy że zostały tam wypushowane. Czyli nie było żadnego squasha.
Shalom
@KamilAdam: git reflog ;) i co oznacza dla ciebie "usunięte commity"? Bo commit który został pushnięty usunięty nie jest, może co najwyżej nie być do niego odwołania w żadnym dostępnym branchu.
somekind
@Shalom, ale push puszhuje lokalnego refloga?
Shalom
Nie, trzeba by mieć wjazd na serwer gdzie stoi to repo gita żeby odzyskać takie commity do których nie ma referencji. Bo one wszystkie sobie leżą w /objects
somekind
W sensie nawet jak coś zesquashuję ze swojego lokalnego brancha do mastera, i lokalnego brancha usunę, to to zostanie wypushowane? Przy okazji jakiej operacji?
Shalom
Nie zostanie, ale w twoim lokalnym repo te squashowane commity nadal są! ;) No i ktoś mógł tego brancha mieć na remote i dopiero przy mergowaniu z masterem zrobić squash, wtedy na remote ten branch był. Nawet jeśli sie go teraz usunie, to co prawda w logu go nie widać i nie da się na niego przełączyć, ale commity nadal w repo są.
somekind
No mojego lokalnego brancha, którego nigdy nigdzie nie wypushowałem, to raczej nikt nie ma.
VT
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad rok
0

Mam wrażenie że mógłbyś zrobić coś takiego - jeden katalog z wycheckoutowaną rewizją i do tego dwa katalogi git-owe - tzn. jeden lokalny do którego kommitujesz co ci się podoba - jakieś śmieci i kod niewyczyszczony a dla klienta osobne repo -w drugim katalogu gitowym ale już ze źródłami poczyszczonymi, bez śmieci. O to ci chodzi?
Wtedy klient widzi tylko ten co 10-ty twój kommit (wyczyszczony) a lokalnie możesz sobie trzymać śmieci.

Jeśli tak - to da się - sam tak robię od jakiegoś czasu.

Zobacz pozostały 1 komentarz
VT
Ale to nie git stash.
Shalom
Brzmi raczej jak development na branchu :D Że akurat ten branch jest na innym remote niż master, to jest przecież nie istotne zupełnie. Tylko kolega robi niepotrzebnie jakieś cuda na kiju :D
VT
Też nie na branchu :) To nie cuda to git :)
Shalom
Nie no ja rozumiem że nie robisz tego na branchu, tylko robisz jakieś dziwne rzeczy, zamiast skorzystać z tego co jest. Jeszcze napisz że dla pewności masz katalog gdzie trzymasz v1.0.zip, v1.1.zip itd ;) Bo ten twój "katalog gitowy" to nic innego jak po prostu "inne remote".
VT
Dlaczego dziwne? To jest proste. Masz podstawowy katalog .git jako lokalne repo, a dodatkowo katalog np. .gitlab. I teraz co chcesz to wrzucasz do lokalnego repo (smieci, etc). Potem czyscisz to i wrzucasz do .gitlab a potem tylko git push do gitlaba z odpowiednimi parametrami. man git prawdę ci powie :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)