الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل هناك مقالات باللغة العربية حول Git؟

بدأه hasan_aljudy في 1 يونيو 2009 · 37 رد · 6,103 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#26

احم, بما اني طبعا لم استخدم السي بلص بلص من زمان, لازم اراجع بعض الامور :)

محاولتي الاولية لاضافة check فشلت نوعا ما,

قمت بتحرير بعض الملفات و اضافة بعض الاكواد, لكي اريكم هذه الاكواد, انفذ الامر git diff و سيخرج لي مقارنة diff بين الكود الحالي و بين اخر ايداع commit

C:\code\encat>git diff
diff --git a/EncAT.h b/EncAT.h
index cac09a5..57acbbd 100644
--- a/EncAT.h
+++ b/EncAT.h
@@ -11,6 +11,10 @@

 namespace EncAT{

+	class IOFail
+	{
+	};
+
	 inline void EncDec( char* memBlock, size_t blockSize, char* password, size_t passSize ){

		 for( size_t C = 0; C < blockSize; C++ )
@@ -33,6 +37,10 @@ namespace EncAT{
		 passFile.open( passPath, std::ios::binary );
		 encFile.open( encFilePath, std::ios::binary );

+		if (srcFile.fail()) throw new IOFail();
+		if (passFile.fail()) throw new IOFail();
+		if (encFile.fail()) throw new IOFail();
+
		 //
		 srcFile.seekg( 0, std::ios::end );
		 srcSize = srcFile.tellg();
diff --git a/main.cpp b/main.cpp
index 0fdd7d2..ed4cfec 100644
--- a/main.cpp
+++ b/main.cpp
@@ -126,8 +126,10 @@ int main()
				desPath = srcPath;
				replaceExt( desPath, "dec" );

+			   try
+			   {
				// Start; Decryption Process
-			   EncAT::EncDecFile( srcPath.c_str(), passPath.c_str(), desPath.c_str() );
+					   EncAT::EncDecFile( srcPath.c_str(), passPath.c_str(), desPath.c_str() );
				// End;

						std::cout << con::clr; // Clear the Intro Screen
@@ -137,9 +139,17 @@ int main()

						<< con::fg_yellow
						<< " EncAT has created one file in the same folder of the encrypte file :" << std::endl << std::endl
-					   << "\t.dec = Decrypted file" << std::endl << std::endl
+					   << "\t.dec = Decrypted file" << std::endl << std::endl;

-					   << con::fg_gray
+			   }
+			   catch(EncAT::IOFail ex)
+			   {
+					   std::cout << std::endl << con::fg_red << "\t ---- I/O Error ---- \t" << std::endl
+				<< con::fg_yellow
+				<< " EncAt could not read the file(s) specified" << std::endl << std::endl;
+			   }
+
+		std::cout << con::fg_gray
						<< "press any key to continue...";

				// Pause
@@ -165,4 +175,4 @@ int main()
				std::cin.get();

	 return 0;
-}
\ No newline at end of file
+}

C:\code\encat>

طبعا الـ output يمرر عن طريق less

يمكن يكون غير مفهوم تماما لغير اللينكسيين (!!) لكنه بسيط, الاسطر اللي عليها - هي الاسطر اللتي حذفت, و الاسطر اللي عليها + هي الاسطر اللتي اضيفت. طبعا لو تم نقل سطر من مكان الى اخر سيظهر انه حذف من مكان و اضيف الى مكان.

الان, الكود لا يعمل بشكل مضبوط, و لكني مع ذلك ساعمل commit

لكن قبل ذلك:

C:\code\encat>git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	   modified:   EncAT.h
#	   modified:   main.cpp
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	   Debug/
#	   EncAT.ncb
#	   EncAT.sln
#	   EncAT.vcproj
#	   EncAT.vcproj.Toshiba.aljudy.user
#	   hello.atp
#	   hello.enc
#	   mop.dec
#	   random.atp
#	   random.dec
#	   random.enc
no changes added to commit (use "git add" and/or "git commit -a")

C:\code\encat>

احيانا اقوم بامر status من حين لاخر فقط لأتاكد ما هي الملفات اللتي تغيرت

و الان لعمل commit يجب اولا ان اضيف الملفات اللتي تم تغييرها

يمكن ان يتم ذلك عن طريق:

git add main.cpp

git add encat.h

و لكن يمكن ايضا اضافة الخيار -a الى الامر commit لكي يقوم بهذا العملية تلقائيا للملفات اللتي اضفناها في وقت سابق

C:\code\encat>git commit -a -m"Trying to handle case where files don't exist, doesn't work yet (compiles but fails to catch the error)"
[master 9c0f45f] Trying to handle case where files don't exist, doesn't work yet (compiles but fails to catch the error)
 2 files changed, 22 insertions(+), 4 deletions(-)

C:\code\encat>

يمكن الان ان انظر الى الـ log

C:\code\encat>git log
commit 9c0f45fe70916d328acf16d50ff02a5240fab3f5
Author: hasen j <hasan.aljudy@gmail.com>
Date:   Thu Jun 4 23:50:07 2009 -0600

	Trying to handle case where files don't exist, doesn't work yet (compiles but fails to catch the error)

commit 618b61a4c1f0d67c8cb7949ea15fd86ef794b582
Author: hasen j <hasan.aljudy@gmail.com>
Date:   Thu Jun 4 22:17:15 2009 -0600

	Initial commit

C:\code\encat>

اعتقد انني عرفت المشكلة .. الـ exception اللذي كنت ارميه كان بصيغة new IOFail() يعني مؤشر, و لكن حين امسكه استخدم IOFail ex بدون مؤشر :P

قمت بتغيير بسيط, و الان اذا قمت بادخال ملف غير موجود في حوار الـ Decrypt سوف يخرج لي رسالة خطأ

C:\code\encat>git diff
diff --git a/EncAT.h b/EncAT.h
index 57acbbd..5ba57c2 100644
--- a/EncAT.h
+++ b/EncAT.h
@@ -37,9 +37,9 @@ namespace EncAT{
		 passFile.open( passPath, std::ios::binary );
		 encFile.open( encFilePath, std::ios::binary );

-		if (srcFile.fail()) throw new IOFail();
-		if (passFile.fail()) throw new IOFail();
-		if (encFile.fail()) throw new IOFail();
+		if (srcFile.fail()) throw IOFail();
+		if (passFile.fail()) throw IOFail();
+		if (encFile.fail()) throw IOFail();

		 //
		 srcFile.seekg( 0, std::ios::end );

بعدها قمت بايداع الكود:

C:\code\encat>git commit -a -m"IOCheck works now for Decrypt dialoge"

الـ log الان شكله هكذا:

C:\code\encat>git log
commit 1b21f0ac570ed2098736cec709e78f217b04f898
Author: hasen j <hasan.aljudy@gmail.com>
Date:   Thu Jun 4 23:57:53 2009 -0600

	IOCheck works now for Decrypt dialoge

commit 9c0f45fe70916d328acf16d50ff02a5240fab3f5
Author: hasen j <hasan.aljudy@gmail.com>
Date:   Thu Jun 4 23:50:07 2009 -0600

	Trying to handle case where files don't exist, doesn't work yet (compiles but fails to catch the error)

commit 618b61a4c1f0d67c8cb7949ea15fd86ef794b582
Author: hasen j <hasan.aljudy@gmail.com>
Date:   Thu Jun 4 22:17:15 2009 -0600

	Initial commit

C:\code\encat>
#27

و الآن قمت بتغليف كود الـ Encryption بنفس الـ try .. catch

C:\code\encat>git diff
diff --git a/main.cpp b/main.cpp
index ed4cfec..538a101 100644
--- a/main.cpp
+++ b/main.cpp
@@ -83,26 +83,37 @@ int main()
				replaceExt( passPath, "atp" );
				replaceExt( desPath, "enc" );

-			   // Start; Encrytion Process
-			   passUnits = fileSize( srcPath.c_str() );
-			   passUnits = (passUnits / sizeof(size_t)) + 1;
-			   EncAT::GeneratePass( passPath.c_str(), passUnits );
-
-			   EncAT::EncDecFile( srcPath.c_str(), passPath.c_str(), desPath.c_str() );
-			   // End;
+		try
+		{
+			// Start; Encrytion Process
+			passUnits = fileSize( srcPath.c_str() );
+			passUnits = (passUnits / sizeof(size_t)) + 1;
+			EncAT::GeneratePass( passPath.c_str(), passUnits );
+
+			EncAT::EncDecFile( srcPath.c_str(), passPath.c_str(), desPath.c_str() );
+			// End;
+
+				std::cout << con::clr; // Clear the Intro Screen
+
+			std::cout << std::endl << std::endl << con::fg_green
+				<< "\t\tFile Encrypted!" << std::endl << std::endl << std::endl << std::endl
+
+				<< con::fg_yellow
+				<< " EncAT has created two files in the same folder of the original file :" << std::endl << std::endl
+				<< "\t.enc = Encrypted file" << std::endl
+				<< "\t.atp = key file (don't lose it!)" << std::endl << std::endl;

-					   std::cout << con::clr; // Clear the Intro Screen
+		}
+		catch( EncAT::IOFail ex )
+		{
+					   std::cout << std::endl << con::fg_red << "\t ---- I/O Error ---- \t" << std::endl
+				<< con::fg_yellow
+				<< " EncAt could not read the file(s) specified" << std::endl << std::endl;
+		}

-			   std::cout << std::endl << std::endl << con::fg_green
-					   << "\t\tFile Encrypted!" << std::endl << std::endl << std::endl << std::endl
-
-					   << con::fg_yellow
-					   << " EncAT has created two files in the same folder of the original file :" << std::endl << std::endl
-					   << "\t.enc = Encrypted file" << std::endl
-					   << "\t.atp = key file (don't lose it!)" << std::endl <<
std::endl
+		std::cout << con::fg_gray
+				<< "press any key to continue...";

-					   << con::fg_gray
-					   << "press any key to continue...";

				// Pause
				std::cin >> pause;

C:\code\encat>

و من ثم نقوم بايداع التغييرات:

C:\code\encat>git commit -a -m"Added IOChecking to the Encrypt dialoge as well"
[master 6c05b2e] Added IOChecking to the Encrypt dialoge as well
 1 files changed, 30 insertions(+), 19 deletions(-)

الان هناك مشكلة, حين اقوم بادخال ملف غير موجود في حوار التشفير, صحيح انه يظهر لي رسالة خطأ, لكنه في نفس الوقت يقوم بانشاء ملفات .enc و .atp فارغة تحمل نفس اسم الملف الغير الموجود اللذي قمت بادخاله.

-----------

بالمناسبة, وضعت المشروع على git hub

http://github.com/hasenj/encat/

اي واحد حاب يستنسخ المشروع عنده او يتابع ما اقوم به يمكنه اصدار هذا الامر:

git clone git://github.com/hasenj/encat.git

في اي مكان, و سيقوم git بسحب المشروع و وضعه في مجلد اسمه encat

#28

السلام عليكم .....

شكرررررررررررررررررررراً أخ حسن :)

طبقت ما قلته بنجاح حتى الآن و أجد الطريقة جداً ممتعة, لا أصدق أنه يمكنني رؤية ما فعلته بالكود بين حين و آخر :lol:

قضيت على أحد كوابيس الليل :lol:

الشيء الوحيد الباقي هو معرفة كيفية استرجاع النسخ السابقة,

و استخدام الأمر clone ....

و هو ما سأحاول معرفته من الـ tutorial الموجودة في موقع git ...

الآن الطريق أصبح واضحاً و لا أعتقد أني سأعود لتنظيم الملفات يدوياً بعد الآن :)

كل ما أحتاجه قليل من الوقت للاعتياد على git :wink:

تحياتي ...

#29
اقتباس
اعتقد انني عرفت المشكلة .. الـ exception اللذي كنت ارميه كان بصيغة new IOFail() يعني مؤشر, و لكن حين امسكه استخدم IOFail ex بدون مؤشر

إيه شغل الـ Garbage Collection ده :lol:

الذاكرة رايحة جاية على كيفها :P

#30
Khaled.Alshaya كتب:
السلام عليكم .....

شكرررررررررررررررررررراً أخ حسن :)

و عليكم السلام,

العفو اخي العزيز, بل انا اشكرك على تفاعلك مع الموضوع :)

بالتوفيق,

و good luck with git

Khaled.Alshaya كتب:

إيه شغل الـ Garbage Collection ده :lol:

الذاكرة رايحة جاية على كيفها :P

هههه معلش يا باشا اصلي شوية نسيت السي بلص بلص و سوالفها :lol:

#31

هذه درس عن git بللغة العربية على موقع اعجوبة

http://www.ojuba.org/wiki/docs/git_tutorial

و شكر لك اخي حسن على معلومات ينبغي علينا الغوص اكتر في موضوع , ربما تكون الحلقة المفقودة

بلنسبة لي في Software Development Process

تم تعديل هذه المشاركة بواسطة ahmad123 في 15 مايو 2010 في 01:51

#32

أعذرني أخي حسن ولكن ماتتكلم فيه أجده في برنامج NetBeans من شركة صن سابقا وأوراكيل حاليا , هل هو نفس التقنيه التي تتحدث عنها ؟ ففي نت بينز يمكنني الرجوع إلى أي تاريخ قمت بالتعديل عليه لملف معين أو للمشروع ككل وأعتقد أنني يمكنني العمل مع فريق ودمج التغيرات من خلال هذا البرنامج فهل البرنامج الذي تتحدث عنه هو منصة عمل مثل نت بينز ؟ أم هو إضافة لمثل هذه المنصة ؟

تم تعديل هذه المشاركة بواسطة bastr3 في 15 مايو 2010 في 02:31

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#33
ahmad123 كتب:

هذه درس عن git بللغة العربية على موقع اعجوبة

http://www.ojuba.org/wiki/docs/git_tutorial

و شكر لك اخي حسن على معلومات ينبغي علينا الغوص اكتر في موضوع , ربما تكون الحلقة المفقودة

بلنسبة لي في Software Development Process

بالنسبة لي git كان بالفعل الحلقة المفقودة في ادارة المشاريع

bastr3 كتب:

أعذرني أخي حسن ولكن ماتتكلم فيه أجده في برنامج NetBeans من شركة صن سابقا وأوراكيل حاليا , هل هو نفس التقنيه التي تتحدث عنها ؟ ففي نت بينز يمكنني الرجوع إلى أي تاريخ قمت بالتعديل عليه لملف معين أو للمشروع ككل وأعتقد أنني يمكنني العمل مع فريق ودمج التغيرات من خلال هذا البرنامج فهل البرنامج الذي تتحدث عنه هو منصة عمل مثل نت بينز ؟ أم هو إضافة لمثل هذه المنصة ؟

!!!

لا اعرف ما اللذي تتحدث عنه بالضبط، ربما نت بينز يحتوي واجهة رسومية لـ subversion و هو نظام لا انصح به لانه من الجيل السابق (مع انه قد يكون افضل تلك الانظمة، لكنه يبقى من الجيل السابق)

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 15 مايو 2010 في 03:11

1 −1
#34

سأقوم بتنزيل البرنامج لأفهم أكثر :) أنا أريد التأكد هل هو محرر أكواد أم برنامج يقوم بعمل مزامنه لمجلد معين فإذا كان محرر فلا يمكنني الإستغناء عن نت بينز أما إذا كان برنامج مزامنه فهذا جيد لأنني أستخدم برامج لا أثق بها :(

أشكرك على المعلومات

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#35
bastr3 كتب:

سأقوم بتنزيل البرنامج لأفهم أكثر :) أنا أريد التأكد هل هو محرر أكواد أم برنامج يقوم بعمل مزامنه لمجلد معين فإذا كان محرر فلا يمكنني الإستغناء عن نت بينز أما إذا كان برنامج مزامنه فهذا جيد لأنني أستخدم برامج لا أثق بها :(

أشكرك على المعلومات

لا هذا و لا ذاك

هو اداة source control و يعمل من سطر الاوامر

1 −1
#36
اقتباس
لا هذا و لا ذاك

هو اداة source control و يعمل من سطر الاوامر

استعجلت الأمر ... لم أقرا الشرح :) سأقوم بقراءه الشرح لأفهم أكثر , بس لأني مشغول قلت أفهم المغزى من البرنامج بدون ما أقرأ الشرح :cool:

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#37

هذه الادوات لا تستخدم الا في المشاريع الجادة واغلب المتواجدين بالمنتديات لا يزالون تحت التعليم

ستجد كل هذه الادوات في بيئة العمل (اذا كانت جادة)

هي عبارة عن تنظيم و حفظ للكود بحيث يمكنك العودة الي النسخة الاقدم من ملف معين في السورس الخ ...

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#38

عفواً على رفع الموضوع مجدداً, شكراً للأخ حسن مجدداً على ما قدمه من شرح عن كيفية و آلية استخدام Git ولكن ما ذكر خلال الموضوع عن SVN هو خاطئ لأنّ SVN ليس قديم و يحتوي على أغلب تعليمات Git و ربما أكثر

حيث أنّ SVN يدعم Client-Server Mode في حال الحاجة أردنا استخدام The Lock-Modify-Unlock Solution و يدعم Offline Mode في حال أردنا استخدام The Copy-Modify-Merge Solution

و ايضا هو يدعم جميع خصائص ال Merge حتى ال Branch Merge موجودة, لا أدري إن كانت النسخة الموجودة حالياً قد تم تطويرها أم لا, ربما كانت النسخة في عام 2009 عند كتابة الموضوع لا تدعم هذه الأمور.

1

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

مواضيع مشابهة