Git – Przeniesienie repozytorium z Subversion do GIT (z zachowaniem historii)

Tworzymy plik który zbiera wszystkich użytkowników komitujących do SVN. Pozwoli to na zachowanie przeniesienie informacji o osobach komitujących do nowo tworzonego repozytorium Git.
Plik powinien mieć następującą postać.

~/committers.txt:

1
2
user1 = First Last Name <email@address.com>
user2 = First Last Name <email@address.com>

Plik tworzymy poniższym poleceniem:

1
2
svn log --quiet svn://svn.somepath/somerepo/trunkorjustroot/ \
  | grep '^r' | awk '{print $3}' | sort | uniq > committers.txt

Tworzymy repozytorium Git i ściągamy do niego dane z istniejącego repozytorium Subversion.

1
2
3
4
  mkdir repo && cd repo
  git svn init http://subversion/repo --no-metadata
  git config svn.authorsfile ~/committers.txt
  git svn fetch

Wyłączcenie globalnego menu w ubuntu 11.10

Wraz z nowym UI Unity do ubuntu wprowadzono tak zwane menu globalne. Jest to ficzer polegający na tym, że górne menu wyświetlane jest w pasku, na samej górze ekranu dopiero po najechaniu kursorem na górę ekranu.

Usunięcie globalnego menu.

1
sudo apt-get remove appmenu-gtk3 appmenu-gtk appmenu-qt

Przywrócenie globalnego menu.

1
sudo apt-get install appmenu-gtk3 appmenu-gtk appmenu-qt

mongoDB Instalacja na Ubuntu 11.10

Dodanie 10gen do repozytoriów. Ich pakiety są zawsze świeże, czego nie można powiedzieć o pakietach Canonical dotyczących mongo.

Do etc/apt/sources.list dodać:

1
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

Instalacja.

1
2
3
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
sudo apt-get update
sudo apt-get install mongodb-10gen

Uruchomienie terminala mongo.

1
  mongo --nodb

Git diff

Dobra znajomość komendy diff jest kluczem dosprawnego posługiwania się Gitem.
diff służy do określania różnic pomiędzy różnymi stanami/rewizjami repozytorium.

Domyślnie komenda użyta bez żadnych parametrów pokazuje różnicę pomiędzy ostatnią rewizją (HEAD) a zmianami, które nie znalazły się jeszcze w indeksie w plikach, które są już obecne w repozytorium. Innaczej mówiąc pokazuje zmiany wprowadzone od ostatniego komita, które NIE ZOSTANĄ zakomitowane

1
git diff

Opcja staged użyta z komendą diff całkowicie zmienia jej działanie. Teraz diff pokaże różnicę pomiędzy ostatnią rewizją (HEAD) a nowymi zmianami ustawionymi w indeksie w plikach, które są już obecne w repozytorium. Inaczej mówiąc pokazuje zmiany wprowadzone od ostatniego komita, które ZOSTANĄ zakomitowane.

1
git diff --staged

Powszechnym błędem popełnianym przez nowych użytkowników git, jest uznawanie że diff wyświetli wszystkie zmiany w stosunku do ostatniej rewizji. Należy zwrócić uwagę na 2 rzeczy:

- Jak napisano wyżej: „(…)w plikach, które są już obecne w repozytorium” oznacza to, że nowe pliki nie będą brane pod uwagę przez polecenie diff. Do odnalezienia tego typu plików służy komenda git status.
- Aby wyświetlić zmiany, które znalazły się już w indeksie konieczne jest użycie opcji staged (lub jej wcześniej używanego synonimu ‘cashed’)

Git – wycofywanie zmian.

Zmiana ostatniego komita poprzez git commit –amend

Opcja amend (ang. „zmień/popraw”) użyta przy poleceniu commit pozwala na zastąpienie ostatnio wykonanego komita nowym obecnie wykonywanym komitem.

1
git commit --amend

Jeżeli od ostatniego komita nie wprowadzono żadnych zmian to powyższe polecenie pozwoli na zmianę treści wiadomości wprowadzanej do logu.

Jeżeli od ostatniego komita wprowadzono zmiany (np. dodano lub usunięto pliki lub zmieniono treść istniejących plików) to zmiany te „zleją się” z tymi, które zostały wprowadzone przez ostatni komit. W rezultacie ostatni i obecny komit (ten z opcją amend) staną się jednym.

1
2
3
4
5
6
7
8
9
10
11
mkdir testrepo
cd testrepo
git init

touch jeden.txt
git add jeden.txt
git commit -m 'pierwszy plik'

touch dwa.txt
git add dwa.txt
git commit --amend -m 'pierwszy i drugi plik'

Polecenie git log potwierdzi, że historia repozytorium zawiera jedynie komit z adnotacją ‘pierwszy i drugi plik’ w którym wprowadzono dwa pliki jeden.txt i dwa.txt.

Wycofywanie plików z indeksu (ze stanu staged na unstaged)

Przygotowując repozytorium do nowego komita wstawiamy (ang. „stage”) nowe pliki do indeksu. Zdarza się. że wstawimy do indeksu gita więcej plików niż chcieli byśmy zakomitować. Do wycofania pliku z indeksu służy komenda: git reset HEAD

1
2
3
4
5
6
7
8
mkdir testrepo
cd testrepo
git init

touch jeden.txt
git add jeden.txt

git reset HEAD jeden.txt

Polecenie git status potwierdzi, że w indeks repozytorium jest pusty. Warto zauważyć, że polecenie status wydane na indeksie z nowo wprowadzonymi plikami, które nie są jeszcze obecne w indeksie podpowiada wyżej opisaną komendę. Można to zbadać wydając w naszym przykładzie polecenie git status zaraz po git add jeden.txt.

Powrót do stanu z ostatniego komita

Aby powrócić do stanu w którym pliki znajdowały się w ostatnim komicie można posłużyć się poleceniem checkout.

1
2
3
4
5
6
7
8
9
mkdir testrepo
cd testrepo
git init

touch jeden.txt
git add jeden.txt
git commit -m 'pierwszy plik'
echo 'tekst' > jeden.txt
git checkout jeden.txt

Polecenie git status potwierdzi, brak zmodyfikowanych plików w repozytorium. Git checkout pobiera stan pliku z ostatniej rewizji (HEAD) co oznacza że nie da się odtworzyć przy jego pomocy stanu plików, które w danej rewizji nie istniały, czyli takich, które nie zostały nigdy zakomitowane.

Źródła:
1. http://progit.org

Wyłączanie touchpad dla ubuntu 11.04 przy podłączaniu myszy

1. Otwieramy terminal i wpisujemy komendy

1
2
3
  sudo add-apt-repository ppa:atareao/atareao
  sudo apt-get update
  sudo apt-get install touchpad-indicator

Po udanej instalacji należy otworzyć (np. poprzez „Panel główny”) aplikację Touchpad Indicator Posiada ona opcję „Wyłącz touchpad kiedy myszka jest podłączona” a także inne opcje do sterowania aktywnością touchpada. Touchpad Indicator jest odtąd dostępny w górnym pasku.

Domyślnie wyłączenie/włączenie touchpada uzyskujemy poprzez skrót klawiszowy „CTRL + SHIFT + C”

PostgreSQL 9.1 na ubuntu 11.10. pgAdminIII phpPgAdmin. Instalacja i podstawy.

PostgreSql

PostgreSql

Instalacja PostgreSQL

Instalacja z konsoli:

1
sudo apt-get install postgresql

Logowanie z konsoli

Aby zalogować się do konsoli administracyjnej serwera PostgreSQL należy użyć polecenia:

1
sudo -u postgres psql

Gdzie:
‘sudo -u postgres’ – przełącza na użytkownika systemowego postgres.
‘psql’ – jest wywołaniem konsoli administracyjnej serwera PosrgreSQL.

Podczas instalacji PostgreSQL użytkownik postgres jest automatycznie dodawany do systemu, przez polecenia inicjalizowane z pakietów instalacyjnych. Aby dostać się do konsoli nowo zainstalowanego serwera PostgreSQL konieczne jest więc zmiana użytkownika systemowego, łączącego się z tym serwerem na użytkownika postgres.

Domyślne dane dostępowe dla nowo zainstalowanego systemu to:

  • user: postgres
  • password: (blank)

Dalej przedstawiony zostanie opis zmiany hasła dla użytkownika postgres. Pozostawienie pustego hasła jest złym rozwiązaniem także na instalacjach testowych/developerskich.

Nowo zainstalowany PostgreSQL pozwala na dostęp poprzez konsole, aby administrować serwerem przy pomocy narzędzi zewnętrznych takich jak phpPgAdmin czy pgAdminIII konieczne będą małe akrobacje opisane w ‘Ustawienie dostępu dla nowo zainstalowanego serwera’

Zarządzanie stanem serwera

Zarządzanie stanami serwera odbywa się porzez polecenie:

1
sudo service postgresql

Niektóre zmiany w ustawieniach serwera wymagają przeładowania jego konfiguracji poprzez opcję reload.

1
sudo service postgresql reload

Aby wyłączyć serwer możemy użyć opcji stop

1
sudo service postgresql stop

Aby uruchomić serwer używamy opcji start

1
sudo service postgresql start

Restart jest jednoznaczny z wyłączeniem i włączeniem serwera

1
sudo service postgresql restart

Ustawienie dostępu dla nowo zainstalowanego serwera

1. Przejście do terminala i uruchomienie psql:

1
:~$ sudo su postgres psql

Pojawia się znak zachęty psql:

1
postgres=#

2. Zmiana/Ustawienie hasła dla użytkownika:

1
# ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';

Istotne jest aby każde polecenie kończyć średnikiem. Samo użycie enter/return powoduje jedynie przejście do nowej linii i kontynuacje polecenia.

‘postgres’ to identyfikator domyślnego użytkownika z uprawnieniami administratora.
Domyślnie użytkownik ten nie posiada hasła. Zalecane jest więc nadanie mu hasła jak najszybciej po instalacji.
Powyższy przykład ustawia hasło, które jest identyczne z identyfikatorem użytkownika, co oczywiście w realnych zastosowaniach nie jest dobrym pomysłem.

4. Utworzenie nowej bazy danych:

1
# CREATE DATABASE lesson1;

‘lesson1′ jest tutaj identyfikatorem nowo tworzonej bazy danych. Podczas wyboru identyfikatora bazy danych należy unikać słów kluczowych związanych ze standardem SQL czy słów specjalnych dla serwera PostgreSQL. Dobra nazwa bazy może być związana z domeną, lub też powinna jak najlepiej oddawać to co sobą reprezentuje i nie należy obawiać się długich nazw.

5. Utworzenie nowego użytkownika:

1
# CREATE USER dbuser WITH ENCRYPTED PASSWORD 'dbpass';

*dbuser to identyfikator nowo utworzonego użytkownika.
*dbpass to hasło

6. Przydzielenie wszystkich przywilejów dla użytkownika w ramach określonej bazy:

1
# GRANT ALL PRIVILEGES ON DATABASE lesson1 TO dbuser;

*ALL – oznacza wszystkie możliwe przywileje. Klauzule ta można zamienić na wybrane przywileje według dokumentacji.
*lesson1 – identyfikator bazy danych
*dbuser – identyfikator użytkownika

Pliki dostępowe dla PostgreSQL

Pliki konfiguracyjne PostgreSQL znajdują się w katalogu:

1
/etc/postgresql/9.1/main/

Przy ustawieniach dostępu do serwera na szczególną uwagę zasługuje plik:

1
/etc/postgresql/9.1/main/pg_hba.conf

Zawiera on dość dobry opis z którym warto się zapoznać. Treści zaczynające się do znaków # są komentarzami nie mającymi wpływu na działanie serwera. Końcówka pliku zawiera klauzule ustawiające dostęp.

Przykładowo fragment pliku:

1
2
# IPv4 local connections:
host all all 127.0.0.1/32 md5

Oznacza, że w przypadku wszystkich prób dostępu do serwera za pomocą interfejsu sieciowego, po adresie 127.0.0.1 serwer będzie dostarczane hasła przetwarzał funkcją haszującą md5. Odpowiada to wcześniej użytym komendom:

1
[CREATE/UDPATE] USER dbuser WITH ENCRYPTED PASSWORD 'dbpass';

Gdzie ENCRYPTED odnosi się właśnie do metody hashującej md5. Także ustawienie hasła bez opcji encrypted w sytuacji kiedy autoryzacja dla danego przypadku ustawiona jest na md5 spowoduje, błędy podczas prób logowania. Jest to dość pospolity problem z którym zmagają się  początkujący użytkownicy PostgreSQL.

Także komendy użyte podczas prac administracyjnych jak dodawanie użytkowników muszą uwzględniać ustawienia dostępu dla serwera zawarte w pg_hba.conf.

Klauzule dostępu w pliku pg_hba.conf mogą być rozbudowywane/zmieniane w miarę pojawiania się nowych użytkowników o różnych ustawieniach dostępu do serwera.

Instalacja pgAdmin3

Instalacja z konsoli:

1
sudo apt-get install pgadmin3

pgAdmin3 jest aplikacją okienkową także jego instalacja wymaga serwera okien, który jest domyślnie dostępny w każdej instalacji ubuntu.

Po uruchomieniu programu należy wybrać opcję „Zdefiniuj połączenie dla serwera” i uzupełnić dane połączenia zgodnie z wcześniej ustawionymi identyfikatorami użytkownika, bazy danych i hasłem.

Instalacja phpPgAdmin

Instalacja z konsoli:

1
sudo apt-get install phppgadmin

phpPgAdmin jest programem działającym pod przeglądarką internetową także do jego uruchomienia potrzebny jest serwer ww oraz interpreter języka PHP.

Apache2:

1
2
sudo apt-get install apache2
sudo vim /etc/apache2 httpd.conf

umieszczamy:

1
ServerName: localhost

i uaktualniamy konfigurację dla serwera:

1
sudo /etc/init.d/apache2 reload

PHP:

1
sudo apt-get install php5

Program jest teraz dostępny pod domeną: http://localhost/phppgadmin/

phpPgAdmin domyślnie nie pozwala na logowanie się użytkownikom nie posiadającym hasła. Także użytkownik ‘postgres’ oraz inni użytkownicy, których identyfikatory (pgsql, postgres, root, administrator) wskazują na to, że są użytkownikami administracyjnymi, nie będą mogli się zalogować.

Konfigurację tego ograniczenia znaleźć można w pliku:

/etc/phppgadmin/config.inc.php

Przestawienie opcji:

1
$conf['extra_login_security'] = true;

rozwiąże problem z dostępem. Oczywiście jest to rozwiązanie dobre dla serwerów testowych/developerskich i ze względów bezpieczeństwa nie dopuszczalne dla serwerów produkcyjnych.

Załadowanie bazy zrzuconej uprzednio do pliku

1
sudo -u postgres psql -U postgres -d dbname -f schema.sql

gdzie:

postgres – użytkownik systemowy

postgres –  użytkownik PostgreSQL

dbname – nazwa bazy

schema.sql – plik ze schematem bazy

psql

Wybrane opcje linii poleceń psql (używane podczas uruchamiania programu):

      - U – Ustawia Użytkownika bazy danych (domyślnie: $PGUSER lub aktualnie zalogowany użytkownik systemu)

Wybrane komendy wewnętrzne psql (używane z poziomu programu):

      \c – Lista wszystkich komend
      \q – Wyjście
      \set – Ustawia zmienną wewnętrzną serwera
      \unset – Resetuje zmienną wewnętrzną serwera
      \h [komenda] – Wyświetla pomoc (dokładny opis) dla wybranej komendy
      \c[onnect] [bazwa|- [użytkownik]] – Łączy do nowej bazy danych
      \l – Lista baz danych
      \dn – Lista schematów
      \encoding – Ustawia kodowanie (UTF8 jest tym co tygrysy lubią najbardziej)

Wybrane polecenia SQL

Wylistowanie użytkowników bazy

1
select * from pg_shadow;

lub

1
select * from pg_user;

polecenia mogą przekierowywać wyjście na edytor vim. W takim wypadku należy wpisać :q i zatwierdzić poprzez enter.

Dump bazy

1
2
3
4
5
6
7
8
#Z bazy do pliku
pg_dump dbname > outfile

#Z pliku do bazy
psql dbname < infile

#Pomiędzy serwerami
pg_dump -h host1 dbname | psql -h host2 dbname