Install MySQL from source with debugging option in Linux

Hörmətli oxucular, bugünkü mövzumuz aşkar edilmiş hər hansı problemi dərinləməsinə araşdırıb tapmaq və yaxud onu debug etməkdən ibarətdir.
Mövzuya biraz teoriya ilə başlamaqda fayda var.
İlk öncə MySQL üçün bəzi anlayişları irəli sürək:
1. MySQL Logging:
MySQL-də log-lamanın növləri aşağıdakılardır:

* General Log – bütün növ RDBMS fəaliyyətlərin hamısı (SQL-lərin hamısı) bu log faylında log-lanır. Production server-lərdə aktiv etmək məsləhət deyil. Səbəbi isə çox sadədir işlək database-də bu log həcmi qısa müddətdə bir neçə GB-yə çata bilər. General Log adətən 1-2 dəqiqəlik lazım olan aktivliyi scan etmək üçün istifadə olunur.

* Slow Quer Log – default olaraq 10 saniyədən daha çox işləyən sorğuların hamısı bu faylda log-lanır. Təbii ki, 10 saniyəni daha aşağı məsələn, 3 saniyə edib sizin database-inizdə 3 saniyədən çox işləyən, həmçinin index-siz çalışdırılan və.s sorğuları aşkarlaya bilərsiniz.

* Error Log – MySQL start olunandan bu yana baş vermiş bütün kritik dəyişikliklər və error-lar bu faylda qeyd olunur. Bizim üçün ən vacib məsələlərdən biri crash və yaxud BUG-la qarşılaşdıqda ilk edəcəyimiz iş bu fayla baxmaqdır. Çox böyük ehtimal ki, bu faylda stack trace qeyd olunub. Nümunə olaraq:

Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x40000
/usr/local/mysql/bin/mysqld(my_print_stacktrace+0x35)[0xab6ead]
/usr/local/mysql/bin/mysqld(handle_fatal_signal+0x404)[0x736ee0]
/lib64/libpthread.so.0[0x35df20f710]
/usr/local/mysql/bin/mysqld[0xd27e2e]
/usr/local/mysql/bin/mysqld[0xd1cc5e]
/usr/local/mysql/bin/mysqld[0xc5d5f6]
/usr/local/mysql/bin/mysqld[0xc5dca7]
/usr/local/mysql/bin/mysqld[0xc5e152]
/lib64/libpthread.so.0[0x35df2079d1]
/lib64/libc.so.6(clone+0x6d)[0x35deee8b5d]

Error Log-da verilən faydalı məlumata baxmayaraq, hər hansı BUG-ı report etdikdə MySQL(Oracle) -ın professional developer-lərinə (hansı ki MySQL-i onlar yazırlar) error-un məhz hansı kod faylının hansı funksiyasında baş verdiyi maraqlandırır. Səbəbi isə çox sadədir BUG-ı reproduce edə bilsinlər və də asanlıqla həmin kod hissəsində dəyişiklik edə bilsinlər. Bunun üçün isə sizdən Linux Admin-lərin çox gözəl bildiyi CORE DUMP tələb olunacaq.
Qeyd edək ki, core dump-ı yalnız və yalnız Debug aktivləşdirilmiş MySQL ilə generate edə biləcəksiniz. Debug mode heç bir halda hazır şəkildə, yüklənə bilən şəkildə (downloadable) saxlanılmır.
Burdan belə çıxır ki, biz MySQL-i source-dan özümüz yazmalı olacıq. CMAKE-ə isə DEBUG-ı aktiv etsin deyə, necə deyərlər bir əmr append edəcik.
Dependency-ləri install edirik:

[root@localhost ~]# yum groupinstall "Development Tools"
[root@localhost ~]# yum install cmake
[root@localhost ~]# yum install ncurses ncurses-devel
[root@localhost ~]# yum install wget

Daha sonra arxiv faylımızı download edirik:
mysql-5.6.19.tar.gz

Daha sonra da ardıclıllıqla:

1. [root@localhost ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz
2. [root@localhost ~]# tar -xvf mysql-5.6.19.tar.gz
3. 
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -r -g mysql mysql
4. [root@localhost ~]# cd mysql-5.6.19
5. [root@localhost mysql-5.6.19]# cmake  -DWITH_DEBUG=1
6. [root@localhost mysql-5.6.19]# make
7. [root@localhost mysql-5.6.19]# make install

Install bitdikdən sonra:

8.  [root@localhost mysql-5.6.19]# cd /usr/local/mysql
9.  [root@localhost mysql]# chown -R mysql .
10. [root@localhost mysql]# chgrp -R mysql .
11. [root@localhost mysql]# scripts/mysql_install_db --user=mysql
2014-07-21 03:52:05 14280 [Note] InnoDB: Using atomics to ref count buffer pool pages
2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_DEBUG switched on !!!!!!!!!
2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_SYNC_DEBUG switched on !!!!!!!!!

Fərqliliyə diqqət yetirin.
Daha sonra:

12. [root@localhost mysql]# chown -R root .
13. [root@localhost mysql]# chown -R mysql data
14. [root@localhost mysql]# bin/mysqld_safe --user=mysql &
[root@localhost mysql]# bin/mysqld_safe --user=mysql &
[1] 14525
[root@localhost mysql]# 140721 03:55:41 mysqld_safe Logging to '/var/log/mysqld.log'.
140721 03:55:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Gördüyünüz kimi artıq, debug MySQL start olundu və öz testlərinizə başlaya bilərsiniz.
Connect olduqda:

[root@localhost bin]# ./mysql -u root --socket=/usr/local/mysql/data/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.19-debug-log Source distribution

Server versiyasında fərqi dərhal görürük: 5.6.19-debug-log.

Deməli, biz artıq sizlərlə, DEBUG MySQL-i install etdik. İndi isə MySQL CORE DUMP-ın alınmasına baxacıq.
Bu məqsədlə biz, my.cnf (MySQL config faylı) faylında [mysqld] kataloqu altında yazırıq:
[mysqld]
core-file

Həmçinin faylın sonuna qeyd edirik:
[mysqld_safe]
core_file_size=unlimited

Bu şəkildə start olunmuş MySQL-də hər hansı crash baş verərsə aşağıdakına bənzər bir output görə bilərsiniz:

bin/mysqld_safe: line 166: 27247 Segmentation fault      (core dumped) 


(core dumped) –
yəni core file artıq yaradıldı.
Default olaraq core file-ı MySQL datadir-də yaradılır.

Sizlərlə MySQL-in source-dan debug option-la installına baxdıq. Həmçinin Core Dump-ın yaradılmasını da göstərdik.
Təşəkkürlər.

Copying Tablespaces to Another Server (Transportable Tablespaces)

May 17, 2014 2 şərh

Bugünkü mövzumuz MySQL 5.6 > versiyalar nəzərdə tutulub odur ki, test etməzdən əvvəl mütləq əmin olun ki, sizin MySQL versiyanlz müvafiqdir.
İndiki hald mən 5.6.17 versiya MySQL-i aşağıdakı opsiyalarla start etmişəm.
QEYD: Transportable Tablespaces-ə nail olmağınız üçün MySQL-i aşağıdakı dəyişənlərlə start etməlisiniz

[mysqld]
innodb_file_per_table          = 1
lower_case_table_names         = 1

Daha sonra test məqsədi ilə, bir kifayət qədər böyük cədvəl tapın.
Məndə artıq biri var təqribən 2.4 gb-dır.
O cədvəli rename edək:

[root@linuxsrv3 xxx]# ls -lthr
total 2,4G
-rw-rw----. 1 mysql mysql   65 2014-05-07 11:05 db.opt
-rw-rw----. 1 mysql mysql  20K 2014-05-12 12:07 test_table.frm
-rw-rw----. 1 mysql mysql 2,4G 2014-05-12 14:05 test_table.ibd

Cədvəlimizi test_table-dan test_table2-yə rename edək.:

[root@linuxsrv3 xxx]# time mysql -u root -p -e 'rename table xxx.test_table to xxx.test_table2'
Enter password: 

real	0m1.973s
user	0m0.002s
sys	0m0.004s

Bu cəmi 1.9 saniyə çəkdi.

Rename-in başqa istifadə yeri də var. Deyək ki, biz bir database-dən cədvəli digərinə move etmək istəyirik bu zaman cədvəlin backup-ını alıb, digər database-də import etməyə ehtiyac yoxdur, aşağıdakı şəkildə bunu edə bilərik:

[root@linuxsrv3 xxx]# time mysql -u root -p -e 'rename table xxx.test_table2 to test.test_table2'
Enter password: 

real	0m1.876s
user	0m0.005s
sys	0m0.003s

Və bizim cədvəlimiz artıq, test database-indədir:

[root@linuxsrv3 test]# ls -lthr
total 2,4G
-rw-rw----. 1 mysql mysql 8,4K 2014-05-12 11:32 ff.frm
-rw-rw----. 1 mysql mysql  96K 2014-05-12 11:33 ff.ibd
-rw-rw----. 1 mysql mysql   65 2014-05-12 11:34 db.opt
-rw-rw----. 1 mysql mysql  20K 2014-05-12 12:07 test_table2.frm
-rw-rw----. 1 mysql mysql 2,4G 2014-05-12 14:05 test_table2.ibd

Deməli gördüyünüz kimi, bir cədvəli bir database-dən digərinə move etməyin sürətli və asan yolunu göstərmiş olduq.
Lakin belə bir sual yaranır, bəs biz bir cədvəli digər server-dəki database-ə copy edə bilərik mi?
Transportable Tablespaces məhz burda bizim köməyimizə gəlir.
Bir daha xatırlatmaqda fayda var ki, buna nail olmanız üçün my.cnf faylında yazının əvvəlində göstərdiyim kimi, dəyişənləri qeyd edib, MySQL-i start etmək lazımdır.
Həmçinin, sizin remote server-də artıq eyni adlı database və eyni adlı (strukturlu) cədvəliniz olmalıdır.

Bizim serverlər aşağıdakılardır:

source server : linuxsrv3
Destination server : linuxsrv4

Destination server-də artıq eyni adlı database və cədvəlimiz var.

Destination server-də biz mövcud boş cədvəlimizin tablespace-ini discard edirik:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> alter table test_table2 discard tablespace;
Query OK, 0 rows affected (0,05 sec)

Əgər yoxlasanız görərsiniz ki, .ibd faylı databse direktoriyamızda yoxdur.

[root@linuxsrv4 test]# ls
db.opt  test_table2.frm

Source serverimizdə:

mysql> use test;
Database changed
mysql> FLUSH TABLES test_table2 FOR EXPORT;
Query OK, 0 rows affected (0,00 sec)

.ibd faylını destination server-ə copy edirik:

[root@linuxsrv3 test]# scp test_table2.ibd root@192.168.1.88:/var/lib/mysql/test
root@192.168.1.88's password: 
test_table2.ibd                       100% 2444MB  15.4MB/s   02:39 

Source server-də:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0,00 sec)

destination server-də:

[root@linuxsrv4 test]# ls
db.opt  test_table2.frm  test_table2.ibd

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> alter table test_table2 IMPORT TABLESPACE;
ERROR 1146 (42S02): Table 'test.test_table2' doesn't exist

Əgər bu error-u gördünüzsə demək ki, owner:

[root@linuxsrv4 test]# ls -l
total 2502684
-rw-rw----. 1 mysql mysql         65 2014-05-12 15:03 db.opt
-rw-rw----. 1 mysql mysql      20166 2014-05-12 15:05 test_table2.frm
-rw-r-----. 1 root  root  2562719744 2014-05-12 15:16 test_table2.ibd

Owner-i mysql user-ə dəyişək:

[root@linuxsrv4 test]# chown mysql:mysql test_table2.ibd
[root@linuxsrv4 test]# ls -l
total 2502684
-rw-rw----. 1 mysql mysql         65 2014-05-12 15:03 db.opt
-rw-rw----. 1 mysql mysql      20166 2014-05-12 15:05 test_table2.frm
-rw-r-----. 1 mysql mysql 2562719744 2014-05-12 15:16 test_table2.ibd

İndi isə bir daha sınayaq:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> alter table test_table2 IMPORT TABLESPACE;
Query OK, 0 rows affected, 1 warning (2 min 29,38 sec)

And checking :

mysql> select idvisit from test_table2 order by idvisit desc limit 1;
+---------+
| idvisit |
+---------+
| 7016951 |
+---------+
1 row in set (0,04 sec)

Bununla da gördüyünüz kimi 2.4 gb-lik bizim cədvəl artıq başqa bir server-də eyni data-larla mövcuddur. Bu əməliyyat toplamda 2 dəqiqə çəkir.
Təşəkkürlər.

Error: database disk image is malformed in CentOS 6.5

[root@tester1 ~]# yum groupinstall "Desktop Platform"
.
.
Error: database disk image is malformed
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Belə bir error-u gördükdən sonra, aşağıdakı addımı etməklə həll etdim:

[root@tester1 ~]# yum clean dbcache
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: base extras updates
4 sqlite files removed

Təşəkkürlər.

Kateqoriyalar: Linux Etiketlər:

Linux Install Tutorials

Hörmətli dostlar, artıq bir neçə müddətdir ki Linux (CentOS 5 və 6) haqqında video dərslər hazırlayıram.
Hər bir dərs addım-addım olub, sizlərə faydalı məlumatlar çatdırır.
İnstall üsullarının hamsını sınayıb dərslərə yığmışam.
Buyurun faydalanın:

1. Installing Centos 5.10 in Text Mode
2. Installing Centos 5.10 in GUİ Mode
3. CentOS 6.5 Network Installation with VNC
4. Centos 6.5 Kickstart Installation

Kateqoriyalar: Linux

File “cx_Oracle.pyc”, line 10, in __load importError: No module named decimal

Python ilə Tkinter vasitəsilə tez bir şəkildə simple Oracle password changer yazmaq lazım oldu.
Həmçinin bu .py faylı .exe-yə convert edib user-ə təqdim etmək lazım idi.
Source Kodları tapa bilərsiniz:

Password Changer GitHUB

Repo-da həm bizim əsl GUİ kodları həmçinin də setup.py faylı var ki, biz onun vasitəsilə .exe yaradırıq.
Lakin py2exe-ni çalışdırdıqda mövzunun adında olduğu kimi cx_ORACLE error verir.

Qeyd edim ki, cx_ORACLE Python və Oracle arasında əlaqə yaradan library-dir.
Uzun axtarışdan sonra aşkarladım ki,
Aşağıdakı şərti setup.py faylına yazdıqda problem həll olur. Bunu tapmaq mənim 1 saatımı apardı lakin sizlər daha bu qədər vaxt itirməyin:

opts={“py2exe” : {“dll_excludes”: ["OCI.dll",], “includes” : ["decimal", ]}

Setup.py faylında artıq qeyd olunub.
Kiçik GUİ-dən print screen:

password_changer

GİT basics

GİT-i install etdikdən sonra, işə başlayaq. Daha əvvəlki yazımızda install haqqında danışmışdıq.
İndi isə özümüz üçün yeni work directory yaradaq və onun üzərində işləyək. Komandaları ardıcıllıqla keçirək:

[root@bsnew ~]# cd /home/
[root@bsnew home]# mkdir git_test
[root@bsnew home]# cd git_test/
[root@bsnew git_test]# git init
Initialized empty Git repository in /home/git_test/.git/

git init komandası bizim direktoriyanı GİT-ə əlavə edir. Yəni, biz deyirik ki, bu direktoriyanı versiyalamağa başla.
Lakin bizim direktoriyamız boş olduğu üçün statusa baxdıqda deyir ki, nothing to commit.

[root@bsnew git_test]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

nümunə README faylını yaradaq və içinə hər hansı məlumat yazaq.

[root@bsnew git_test]# vim README

İndi yenidən statusa baxdıqda:

[root@bsnew git_test]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       README
nothing added to commit but untracked files present (use "git add" to track)

Status dəyişdi, yeni status-da untracked faylın olduğunu bildirir.
bu faylı tracked etmək üçün onu add etməliyik:

[root@bsnew git_test]# git add README

Bir daha statusa baxaq:

[root@bsnew git_test]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#

Gördüyünüz kimi yeni faylı gördü, dolayısı ilə artıq bu fayl track olunur.

İndi isə gəlin həmin bu README faylına əlavə sətrlər qeyd edək və faylı save edək.
Əvvəlki halı:

[root@bsnew git_test]# cat README
Test

Yeni halı:

[root@bsnew git_test]# cat README
Test
TEST2
TEST3

Statusu bir daha yoxlayaq:

[root@bsnew git_test]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   README
#

Track olunan README faylımızda olan dəyişiklik dərhal detect olundu və gördüyümüz kimi, modified yazılıb.
Lakin diqqətlə oxuduqda görürük ki, Changes not staged for commit yazılıb.
Bu mo deməkdir ki, bu yeni yazdığımız dəyişikliklər gələn dəfəki commit-də yer almayacaq. Buna diqqət yetirmək lazımdır.
Faylı Stage hala gətirə bilməyimiz üçün onu bir daha git add etməliyik. Ümumiləşdirdikdə görürük ki, git add həm hər hansı yeni faylı track etdirir həmçinin də, unstage halda olan faylı stage hala gətirir. Stage halda olan fayl commit-ə hazır fayl sayılır.

Sınayaq:

[root@bsnew git_test]# git add README
[root@bsnew git_test]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   README
#

Changes to be committed özündə commit olunacaq, son halda olan faylı göstərir.

Belə bir sual yaranır. Deyək ki, biz faylda dəyişiklik edirik və daha sonra bilmək istəyirik ki, hansı dəyişiklikləri etmişik.
Bunun üçün git diff-dən istifadə edəcik.

QEYD: git diff yalnız unstage halda olan fayldaki dəyişiklikləri göstərir

Sınayaq:

[root@bsnew git_test]# git diff
diff --git a/README b/README
index b3dd4d0..74ebf90 100644
--- a/README
+++ b/README
@@ -2,3 +2,6 @@ Test
 TEST2
 TEST3
 TEST4
+TEST5
+TEST6
+TEST7

Gördüyümüz
+TEST5
+TEST6
+TEST7

bizim etdiyimiz və unstage olunmuş dəyişikliklərdir.
Əgər biz unstage halındakı faylı, yuxarıdakı qaydada stage hala gətirsək git diff heç bir şey göstərməyəcək:

[root@bsnew git_test]# git add README

[root@bsnew git_test]# git diff
[root@bsnew git_test]#

Faylımız Stage halda commit-ə hazır olduğu üşün biz onu commit edə bilərik:

[root@bsnew git_test]# git commit
[master (root-commit) 96ff1ed] First Commit
 1 file changed, 7 insertions(+)
 create mode 100644 README

git commit run etdikdə bizim core.editor-da təyin etdiyimiz sevimli editorumuz açılır.
Və biz orda Fisr Commit yazmaqla ilk commitimizi elan edirik.
7 sətr insert olunub 1 faylımız var.

ÜMUMİLƏŞDİRMƏ:
Hər hansı yeni fayl əlavə edildikdə o `UNTRACKED` olaraq qeyd olunur. Faylı `TRACKED` etmək üçün bizim komandamız
git add file_name-dir.
TRACK olunmuş fayl əsas etibarı ilə 2 halda olur STAGED və UNSTAGED. UNSTAGED halında , commit zamanı dəyişikliklər commit olunmayacaq. Dolayısı ilə commit-dən əvvəl biz faylı STAGE hala gətirməliyik.
Bunun üçün də komandamız git add file_name-dır. STAGE olunmuş faylı commit edə bilərik.

Təbii ki, bəzən yorucu olur hər dəfə git add edib faylları STAGE hala gətirmək. STAGİNG area-nı skip etmək mümkündür:

README faylına əlavələr edək:

[root@bsnew git_test]# git diff
diff --git a/README b/README
index 74ebf90..e879f2e 100644
--- a/README
+++ b/README
@@ -5,3 +5,6 @@ TEST4
 TEST5
 TEST6
 TEST7
+TEST8
+TEST9
+TEST10

Adi şəkildə git commit etsək təbii ki, bu dəyişikliklər commit olunmayacaq çünki biz faylımızı STAGE etməmişik. Bir daha git add etmədən commit etmək üçün:

[root@bsnew git_test]# git commit -a -m "Added new Lines"
[master 9d8ffd2] Added new Lines
 1 file changed, 3 insertions(+)

[root@bsnew git_test]# git status
# On branch master
nothing to commit, working directory clean

Faylları necə silək? GİT üçün faylın silinməsi, həmin faylın stage area-dan silinməsi deməkdir. Ola bilsin ki, heç o fayl diskdən silinməsin lakin GİT onu görməsin. Bu faydalı ola bilər. Məsələn, biz istəyirik ki fayl olduğu kimi qalsən lakin GİT onu görməsin.
İlk öncə gəlin faylı birbaşa silək və bəzi testlər aparaq:

[root@bsnew git_test]# rm README
rm: remove regular file `README'? y

İndi isə git statusa baxaq:

[root@bsnew git_test]# git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    README
#
no changes added to commit (use "git add" and/or "git commit -a")

Faylı birbaşa silməyimizə baxmayaraq GİT həmin faylı unstaged olaraq görür. Faylı necə deyərlər Gİt-dən də silmək üçün:

[root@bsnew git_test]# git rm README
rm 'README'

[root@bsnew git_test]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    README
#

Status dəyişdi Changes to be committed. Dolayısı ilə əgər indi biz commit etmiş olsaq daha o faylı görməyəcik.

[root@bsnew git_test]# git commit

[master 6a9ee34] Deleted File
 1 file changed, 10 deletions(-)
 delete mode 100644 README

Bəli diqqətlə oxusaq görürük ki, 1 file changed 10 deletions(-). Faylımız silindi.

[root@bsnew git_test]# git status
# On branch master
nothing to commit, working directory clean

Bəli biz faylımızı həm diskdən, həm də GİT-dən silmiş olduq.
Lakin yuxarıda dediyim kimi, hərdən bizə lazım olur ki, fayl silinməsin sadəcə elə edək ki, GİT onu görməsin.
Bunu test edək:

[root@bsnew git_test]# touch readme.txt
[root@bsnew git_test]# nano  readme.txt
~ Yeni nəsə yazın ~

[root@bsnew git_test]# git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       readme.txt
nothing added to commit but untracked files present (use "git add" to track)

[root@bsnew git_test]# git add readme.txt

[root@bsnew git_test]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   readme.txt
#

[root@bsnew git_test]# git commit -m "Newfile"
[master e4adafe] Newfile
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

[root@bsnew git_test]# git rm --cached readme.txt
rm 'readme.txt'

[root@bsnew git_test]# ls
readme.txt

[root@bsnew git_test]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    readme.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       readme.txt

[root@bsnew git_test]# git commit
[master 095efb1] File Modified
 1 file changed, 1 deletion(-)
 delete mode 100644 readme.txt

[root@bsnew git_test]# git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       readme.txt
nothing added to commit but untracked files present (use "git add" to track)

Gördüyümüz kimi, file artıq untracked olundu lakin, diskden silinmədi. Bizə də lazım olan elə bu idi.

* Faylların adının dəyişdirilməsi

Rename etmək üçün git mv komandasından istifadə etmək lazımdır.

[root@bsnew git_test]# git mv readme.txt readit.txt

[root@bsnew git_test]# ls
readit.txt

[root@bsnew git_test]# cat readit.txt
HELLo world

[root@bsnew git_test]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    readme.txt -> readit.txt
#

[root@bsnew git_test]# git commit
[master e1989bb] Renamed
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename readme.txt => readit.txt (100%)

[root@bsnew git_test]# git status
# On branch master
nothing to commit, working directory clean

Dərhal faylın rename olunduğu detect olundu və commitdən sonra artıq təsdiqləndi.

Fikrimcə ilkin olaraq bu qədər məlumat kifayət edər.
Təşəkkürlər ))

Kateqoriyalar: Git/GitHub, Linux

Installing GIT on Ubuntu 13.10

Versioning sistemlər arasında bəlkə də ən tanınmışı və sürətlisi olan GİT haqqında yazılardan ilkinə başlayırıq.
Bu yazıda GİT-in Ubuntu Linux üzərinə install-ı, ilkin config-inə baxacıq.

Dependency error almamaq üçün:

apt-get install libcurl4-openssl-dev libssl-dev

İlk olaraq GİT-in rəsmi saytından stable release-i download edirik,
http://git-scm.com/downloads

Daha sonra arxivi unpack edirik,

unzip git-master.zip

sh@shrzayev:~/Downloads$ cd git-master/

sh@shrzayev:~/Downloads/git-master$ make prefix=/usr/local all
.
.
.
sh@shrzayev:~/Downloads/git-master$ sudo make prefix=/usr/local install
.
.

Vəssalam, ən yeni versiya GİT-imiz install olundu

sh@shrzayev:~/Downloads/git-master$ /usr/local/bin/git --version
git version 1.9.0

Digər bir üsul isə təbii ki, apt-get -lə install etməkdir lakin onun versiyası daha aşağı olacaq:

sh@shrzayev:~$ sudo apt-get install git
.
.
sh@shrzayev:~$ git --version
git version 1.8.3.2

Beləliklə bizim əlimizdə GİT-imiz var.

İndi isə ilkin config-ləməni edək.
Öz adımız və mailimizi yazaq:

sh@shrzayev:~$ git config --global user.name "Shahriyar Rzayev"
sh@shrzayev:~$ git config --global user.email "rzayev.sehriyar@gmail.com"
sh@shrzayev:~$ git config --list
user.name=Shahriyar Rzayev
user.email=rzayev.sehriyar@gmail.com

Default editor-umuzu təyin edək, mən özümçün bunu komodo-edit olaraq təyin edirəm siz Linux-da available olan istənilən editor-u seçə bilərsiniz(Vİ, EMACS, GEDİT və.s)

sh@shrzayev:~$ git config --global core.editor komodo-edit
sh@shrzayev:~$ git config --list
user.name=Shahriyar Rzayev
user.email=rzayev.sehriyar@gmail.com
core.editor=komodo-edit

Default diff tool-umuzu təyin edirik:

sh@shrzayev:~$ git config --global merge.tool vimdiff

İlkin mərhələdə bizə lazım olanlar sadəcə bunlar idi.
Təşəkkürlər.

İzlə

Hər yeni yazı üçün e-poçt qutunuza göndəriş alın.

Digər 208 izləyiciyə qoşulun