fix: converted single to triple backticks7 (#36234)
This commit is contained in:
@ -12,12 +12,13 @@ localeTitle: فليكس الملكية
|
||||
|
||||
الاختلافات الممكنة في بناء الجملة المذكورة أدناه. `flex-grow` `flex-shrink` يأخذ عدد صحيح كقيمة. `flex-basis` يأخذ وحدات حجم منتظم مثل px ، em ، rem… الخ.
|
||||
|
||||
`flex: <flex-grow> <flex-shrink> <flex-basis>;
|
||||
flex: <flex-basis>;
|
||||
flex: <flex-grow>;
|
||||
flex: <flex-grow> <flex-basis>;
|
||||
flex: <flex-grow> <flex-shrink>;
|
||||
`
|
||||
```css
|
||||
flex: <flex-grow> <flex-shrink> <flex-basis>;
|
||||
flex: <flex-basis>;
|
||||
flex: <flex-grow>;
|
||||
flex: <flex-grow> <flex-basis>;
|
||||
flex: <flex-grow> <flex-shrink>;
|
||||
```
|
||||
|
||||
تحدد `flex-basis` حجم العنصر على طول المحور الرئيسي. داخل الحاوية ، يتم تعريف المحور الرئيسي `flex-direction` . المحور الرئيسي هو الأفقي عندما يكون `flex-direction` هو `row` . عمودي عندما يكون `flex-direction` هو `column` .
|
||||
|
||||
|
@ -6,14 +6,15 @@ localeTitle: تعويم الملكية
|
||||
|
||||
تسمح الخاصية `float` لعنصر يطفو إلى يمين أو يمين عنصر آخر. الاستخدام الأساسي `float` هو الحصول على صورة على يسار أو يمين كتلة النص.
|
||||
|
||||
`.my-element {
|
||||
float: left;
|
||||
float: right;
|
||||
float: inline-start;
|
||||
float: inline-end;
|
||||
float: none;
|
||||
}
|
||||
`
|
||||
```css
|
||||
.my-element {
|
||||
float: left;
|
||||
float: right;
|
||||
float: inline-start;
|
||||
float: inline-end;
|
||||
float: none;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,36 +10,39 @@ localeTitle: الخط الأسرة الملكية
|
||||
|
||||
لتغيير خط جزء من النص ، اكتب محدد النص المحدد وزوج من الأقواس المتعرجة. داخل الأقواس ، اكتب `font-family:` ثم اسم الخط. إذا كان اسم الخط يحتوي على أكثر من كلمة واحدة ، فستحتاج إلى استخدام علامتي اقتباس مفردتين أو مزدوجتين. خلاف ذلك ، ليست هناك حاجة لأسعار.
|
||||
|
||||
`
|
||||
<p>This font will be in Times New Roman.</p>
|
||||
`
|
||||
```html
|
||||
<p>This font will be in Times New Roman.</p>
|
||||
```
|
||||
|
||||
`p {
|
||||
font-family: 'Times New Roman';
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-family: 'Times New Roman';
|
||||
}
|
||||
```
|
||||
|
||||
لكن العديد من الأشخاص المختلفين الذين لديهم أجهزة كمبيوتر مختلفة يتصفحون الويب على مستوى العالم. هذا يعني أنه لن يكون لدى الجميع New Times Roman مثبتًا في أجهزة الكمبيوتر الخاصة بهم. لمساعدة هؤلاء المستخدمين ، يجب عليك إضافة الخطوط الاحتياطية. الخطوط الاحتياطية هي خطوط أخرى يستخدمها المتصفح في حالة عدم توفر الخط الأول. إضافة فاصلة بعد الخط الأول ، وأضف اسم الخط الاحتياطي الأول. يمكنك استخدام أكثر من خط احتياطي واحد.
|
||||
|
||||
`
|
||||
<p>This font may or may not be in Lato.</p>
|
||||
`
|
||||
```html
|
||||
<p>This font may or may not be in Lato.</p>
|
||||
```
|
||||
|
||||
`p {
|
||||
font-family: Lato, Helvetica, Georgia;
|
||||
/* Helvetica and Georgia are fallback fonts */
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-family: Lato, Helvetica, Georgia;
|
||||
/* Helvetica and Georgia are fallback fonts */
|
||||
}
|
||||
```
|
||||
|
||||
إذا لم يكن المستخدم مثبتًا على Lato أولاً ، فسيحاول المتصفح استخدام Helvetica. إذا لم يكن لدى المستخدم أيضًا Helvetica ، فسيحاول المتصفح استخدام جورجيا. إذا لم يكن لدى المستخدم جورجيا ، فسيستخدم المتصفح خطًا مثبتًا على جهاز الكمبيوتر الخاص بالمستخدم.
|
||||
|
||||
بالنسبة إلى الخطوط الاحتياطية ، يمكنك استخدام الخطوط المسماة مثل جورجيا. يمكنك أيضًا استخدام أنواع عامة مثل "sans-serif" و "serif" و "monospace" وغيرها. خطوط Sans-serif ، مثل Lato ، هي خطوط بدون خطوط صغيرة في نهايات الحروف والأرقام. تستخدم خطوط Serif ، مثل Times New Roman ، خطوطًا صغيرة في نهايات الحروف والأرقام. تحتوي خطوط Monospace ، مثل Consolas ، على أحرف وأرقام متساوية العرض.
|
||||
|
||||
`
|
||||
<p>This font may or may not be in Lato.</p>
|
||||
`
|
||||
```html
|
||||
<p>This font may or may not be in Lato.</p>
|
||||
```
|
||||
|
||||
`p {
|
||||
font-family: Lato, sans-serif, monospace;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-family: Lato, sans-serif, monospace;
|
||||
}
|
||||
```
|
@ -8,8 +8,9 @@ localeTitle: حجم الخط الممتلكات
|
||||
|
||||
يتم استخدام الخاصية `font-size` لتعيين حجم خط العنصر. يوجد أدناه بناء الجملة الافتراضي لهذه الخاصية.
|
||||
|
||||
`font-size:medium|xx-small|x-small|small|large|x-large|xx-large|smaller|larger|length|initial|inherit;
|
||||
`
|
||||
```css
|
||||
font-size:medium|xx-small|x-small|small|large|x-large|xx-large|smaller|larger|length|initial|inherit;
|
||||
```
|
||||
|
||||
كما هو موضح أعلاه ، يمكن أن تأخذ هذه الخاصية عدة قيم. القيمة الافتراضية هي _متوسطة الحجم_ والقيم من _xx-small_ إلى _xx-large_ تحدد حجم الخط من صغير جدًا إلى كبير جدًا (مثل أحجام الملابس). تحدد القيم _الأصغر_ _والأكبر_ حجم الخط إلى أصغر من حجم خط العنصر الأصلي وأكبر من حجم خط العنصر الأصلي ، على التوالي. على الرغم من توافر القيم المذكورة ، فإن أكثر أنواع القيم المستخدمة شيوعًا هو وحدة الطول. قد تتضمن وحدات الطول: **px** و **٪** و **em** و **rem** و **pt** .
|
||||
|
||||
@ -21,10 +22,11 @@ localeTitle: حجم الخط الممتلكات
|
||||
|
||||
**مثال:**
|
||||
|
||||
`p {
|
||||
font-size: 20px;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-size: 20px;
|
||||
}
|
||||
```
|
||||
|
||||
**نتيجة:** 
|
||||
|
||||
@ -34,10 +36,11 @@ localeTitle: حجم الخط الممتلكات
|
||||
|
||||
**مثال:**
|
||||
|
||||
`p {
|
||||
font-size: 120%;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-size: 120%;
|
||||
}
|
||||
```
|
||||
|
||||
**نتيجة:**  يغيّر الرمز أعلاه حجم الخط إلى 120٪ من حجم الخط الافتراضي وهو 16 بكسل.
|
||||
|
||||
@ -47,10 +50,11 @@ localeTitle: حجم الخط الممتلكات
|
||||
|
||||
**مثال:**
|
||||
|
||||
`p {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
```
|
||||
|
||||
**نتيجة:**  يعيّن الرمز أعلاه حجم الخط في الفقرة إلى 1.4 مرة حجم الخط من أقرب أصل وهو العنصر الأساسي. يحتوي عنصر النص على حجم خط افتراضي يبلغ 16 بكسل ، لذا سيكون لهذه الفقرة حجم خط يبلغ 1.4 \* 16 = 22.4 بكسل.
|
||||
|
||||
@ -76,10 +80,11 @@ localeTitle: حجم الخط الممتلكات
|
||||
|
||||
**مثال:**
|
||||
|
||||
`p {
|
||||
font-size: 16pt;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-size: 16pt;
|
||||
}
|
||||
```
|
||||
|
||||
**نتيجة:**  حجم الخط أعلاه هو 16 نقطة.
|
||||
|
||||
|
@ -6,10 +6,11 @@ localeTitle: الخط البديل
|
||||
|
||||
يتم استخدام خاصية متغير الخط الأكثر شيوعًا لتغيير النص المستهدف إلى أحرف استهلالية صغيرة. القيمة الافتراضية أمر `normal` .
|
||||
|
||||
`p {
|
||||
font-variant: small-caps;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-variant: small-caps;
|
||||
}
|
||||
```
|
||||
|
||||
يقبل مكان الإقامة أيضًا `all-small-caps` `petite-caps` `all-petite-caps` `titling-caps` و `unicase` . ومع ذلك ، فهي جديدة في CSS3 ولم يتم دعمها بشكل جيد بعد.
|
||||
|
||||
|
@ -6,16 +6,17 @@ localeTitle: خاصية تباعد الأحرف
|
||||
|
||||
تقوم خاصية تباعد الحروف بتعديل المسافة بين كل الحروف في كتلة النص. ويشار إليه أيضًا باسم "التعقب" في شروط الطباعة وفي البرامج ذات خيارات إعداد النوع المتقدمة. يقبل الموقع قيم طول `px` و `em` ، بما في ذلك القيم السالبة.
|
||||
|
||||
`.first-example {
|
||||
letter-spacing: 3px;
|
||||
}
|
||||
.second-example {
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
.third-example {
|
||||
letter-spacing: 0.5em;
|
||||
}
|
||||
`
|
||||
```css
|
||||
.first-example {
|
||||
letter-spacing: 3px;
|
||||
}
|
||||
.second-example {
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
.third-example {
|
||||
letter-spacing: 0.5em;
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
@ -8,24 +8,25 @@ localeTitle: خاصية تحويل النص
|
||||
|
||||
أكثر القيم استخدامًا لهذه الخاصية هي `lowercase` `uppercase` `capitalize` .
|
||||
|
||||
`<style>
|
||||
.lowercased {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.uppercased {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.capitalized {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p class="uppercased">this text was lowercase.</p> <!-- = THIS TEXT WAS LOWERCASE. -->
|
||||
<p class="lowercased">THIS TEXT WAS UPPERCASE.</p> <!-- = this text was uppercase. -->
|
||||
<p class="capitalized">this text wasn't capitalized.</p> <!-- = This Text Wasn't Capitalized. -->
|
||||
`
|
||||
```
|
||||
<style>
|
||||
.lowercased {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.uppercased {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.capitalized {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p class="uppercased">this text was lowercase.</p> <!-- = THIS TEXT WAS LOWERCASE. -->
|
||||
<p class="lowercased">THIS TEXT WAS UPPERCASE.</p> <!-- = this text was uppercase. -->
|
||||
<p class="capitalized">this text wasn't capitalized.</p> <!-- = This Text Wasn't Capitalized. -->
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -12,10 +12,11 @@ localeTitle: الملكية الفضائية البيضاء
|
||||
|
||||
#### مثال
|
||||
|
||||
`p {
|
||||
white-space: nowrap;
|
||||
}
|
||||
`
|
||||
```
|
||||
p {
|
||||
white-space: nowrap;
|
||||
}
|
||||
```
|
||||
|
||||
#### القيم
|
||||
|
||||
|
@ -12,11 +12,12 @@ z-index: auto | number | initial | inherit؛
|
||||
|
||||
#### مثال
|
||||
|
||||
`div {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
`
|
||||
```
|
||||
div {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
```
|
||||
|
||||
#### القيم
|
||||
|
||||
|
@ -10,19 +10,20 @@ localeTitle: صف دراسي
|
||||
|
||||
خلافا لأسماء فئة "معرف" CSS ليست فريدة. لذلك ، لا بأس من استخدام "class" عدة مرات إذا كنت ترغب في أن يكون لهذه العناصر نفس النمط المطبق. في الواقع ، سيكون هذا وقتًا رائعًا لاستخدام "الفئة". إذا كنت ترغب في وجود ثلاثة عناصر "div" في HTML لديك خلفية زرقاء ، يمكنك استخدام فئة مرة واحدة في CSS كما يظهر في المثال أدناه.
|
||||
|
||||
`<html>
|
||||
<style>
|
||||
.blueBg {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="blueBg"></div>
|
||||
<div class="blueBg"></div>
|
||||
<div class="blueBg"></div>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
```
|
||||
<html>
|
||||
<style>
|
||||
.blueBg {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="blueBg"></div>
|
||||
<div class="blueBg"></div>
|
||||
<div class="blueBg"></div>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,7 +10,8 @@ localeTitle: علامة الدولار تساوي
|
||||
|
||||
إذا كنت تريد البحث في جميع روابط الربط بنوع الملف .pdf وجعلها حمراء ، فيمكنك القيام بذلك على النحو التالي:
|
||||
|
||||
`a[href$=".pdf"] {
|
||||
color: red;
|
||||
}
|
||||
`
|
||||
```css
|
||||
a[href$=".pdf"] {
|
||||
color: red;
|
||||
}
|
||||
```
|
@ -10,7 +10,8 @@ localeTitle: نجمة
|
||||
|
||||
إذا كنت تريد البحث في جميع روابط الربط التي تحتوي على "رمز" في أي مكان في قيمة عنوان URL وجعلها صفراء ، فيمكنك إجراء ذلك على النحو التالي:
|
||||
|
||||
`a[href*="code"] {
|
||||
color: yellow;
|
||||
}
|
||||
`
|
||||
```css
|
||||
a[href*="code"] {
|
||||
color: yellow;
|
||||
}
|
||||
```
|
@ -8,17 +8,19 @@ localeTitle: طفل
|
||||
|
||||
في ما يلي مثال على البنية:
|
||||
|
||||
`first selector (parent) > second selector (child) {
|
||||
css declarations;
|
||||
}
|
||||
`
|
||||
```css
|
||||
first selector (parent) > second selector (child) {
|
||||
css declarations;
|
||||
}
|
||||
```
|
||||
|
||||
في ما يلي مثال الكود الذي يطابق كل عنصر `span` الفوري مع أصل `div` :
|
||||
|
||||
`div > span {
|
||||
background-color: red;
|
||||
}
|
||||
`
|
||||
```css
|
||||
div > span {
|
||||
background-color: red;
|
||||
}
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -8,24 +8,27 @@ localeTitle: نوع
|
||||
|
||||
#### كود النحو
|
||||
|
||||
`* {
|
||||
css declarations;
|
||||
}
|
||||
`
|
||||
```css
|
||||
* {
|
||||
css declarations;
|
||||
}
|
||||
```
|
||||
|
||||
#### مثال الكود
|
||||
|
||||
`h1 {
|
||||
background-color: red;
|
||||
}
|
||||
`
|
||||
```css
|
||||
h1 {
|
||||
background-color: red;
|
||||
}
|
||||
```
|
||||
|
||||
يختار كل عنصر h1 وتعيين لون الخلفية باللون الأحمر.
|
||||
|
||||
`div {
|
||||
width: 100px;
|
||||
}
|
||||
`
|
||||
```css
|
||||
div {
|
||||
width: 100px;
|
||||
}
|
||||
```
|
||||
|
||||
يختار كل عنصر div وعرض عنصر العرض 100 بكسل.
|
||||
|
||||
|
@ -8,35 +8,40 @@ localeTitle: عالمي
|
||||
|
||||
### كود النحو
|
||||
|
||||
`* {
|
||||
css declarations;
|
||||
}
|
||||
`
|
||||
```css
|
||||
* {
|
||||
css declarations;
|
||||
}
|
||||
```
|
||||
|
||||
`element * {
|
||||
css declarations;
|
||||
}
|
||||
`
|
||||
```css
|
||||
element * {
|
||||
css declarations;
|
||||
}
|
||||
```
|
||||
|
||||
#### مثال الكود
|
||||
|
||||
يطابق هذا المحدد جميع العناصر ويضبط لون الخط كمؤشر أخضر.
|
||||
|
||||
`* {
|
||||
color: green;
|
||||
}
|
||||
`
|
||||
```css
|
||||
* {
|
||||
color: green;
|
||||
}
|
||||
```
|
||||
|
||||
يحدد هذا المحدد جميع عناصر div ويضبط لون الخط كملف أخضر.
|
||||
|
||||
`div * {
|
||||
color: green;
|
||||
}
|
||||
`
|
||||
```css
|
||||
div * {
|
||||
color: green;
|
||||
}
|
||||
```
|
||||
|
||||
يحدد هذا المحدد جميع العناصر التي تبدأ قيمة سمة اللغة الخاصة بها بـ en.
|
||||
|
||||
`* [lang^=en] {
|
||||
color: green;
|
||||
}
|
||||
`
|
||||
```css
|
||||
* [lang^=en] {
|
||||
color: green;
|
||||
}
|
||||
```
|
@ -10,16 +10,17 @@ localeTitle: محددات
|
||||
|
||||
ستتراكم المحضرات مرتبة في تسلسل محدد لقاعدة لاستهداف العناصر. مثال،
|
||||
|
||||
`/* selects anchor tags */
|
||||
a {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
/* selects elements with hero class */
|
||||
.hero {
|
||||
text-align: center;
|
||||
}
|
||||
`
|
||||
```css
|
||||
/* selects anchor tags */
|
||||
a {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
/* selects elements with hero class */
|
||||
.hero {
|
||||
text-align: center;
|
||||
}
|
||||
```
|
||||
|
||||
## نوع من المحددات
|
||||
|
||||
|
@ -10,14 +10,15 @@ localeTitle: نشيط
|
||||
|
||||
في المثال أدناه ، عندما ينقر مستخدم على رابط ، سيتغير لون النص من الأسود إلى الأحمر إلى أن يتوقف إجراء النقر.
|
||||
|
||||
`a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: red;
|
||||
}
|
||||
`
|
||||
```css
|
||||
a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: red;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -33,25 +33,27 @@ localeTitle: التركيز
|
||||
|
||||
بناء الجملة:
|
||||
|
||||
`:focus
|
||||
`
|
||||
```css
|
||||
:focus
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
HTML:
|
||||
|
||||
`
|
||||
<form>
|
||||
<input type="text" value="The background will turn yellow when you click on it.">
|
||||
</form>
|
||||
`
|
||||
```html
|
||||
<form>
|
||||
<input type="text" value="The background will turn yellow when you click on it.">
|
||||
</form>
|
||||
```
|
||||
|
||||
CSS:
|
||||
|
||||
`input:focus {
|
||||
background-color: yellow;
|
||||
}
|
||||
`
|
||||
```css
|
||||
input:focus {
|
||||
background-color: yellow;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -19,69 +19,69 @@ The `selector:hover` يتم تشغيل فئة pseudo-class عند التفاعل
|
||||
|
||||
1. عندما تقوم بتحريك مؤشر الماوس فوق عنصر ما ، قم بتغيير الأخوة المجاورة.
|
||||
|
||||
`
|
||||
<style>
|
||||
.first:hover + .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">First</div>
|
||||
<div class="second">Second</div>
|
||||
`
|
||||
```html
|
||||
<style>
|
||||
.first:hover + .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">First</div>
|
||||
<div class="second">Second</div>
|
||||
```
|
||||
|
||||
سيعمل الرمز أعلاه على تغيير لون خلفية `.second` إلى blue عند تحريك مؤشر الماوس فوق `.first` .
|
||||
|
||||
2. عندما تقوم بتحريك مؤشر الماوس فوق عنصر ما ، قم بتغيير الأخوة العامة.
|
||||
|
||||
`
|
||||
<style>
|
||||
.first:hover ~ .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">First</div>
|
||||
<div class="middle">Middle</div>
|
||||
<div class="second">Second</div>
|
||||
`
|
||||
```html
|
||||
<style>
|
||||
.first:hover ~ .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">First</div>
|
||||
<div class="middle">Middle</div>
|
||||
<div class="second">Second</div>
|
||||
```
|
||||
|
||||
يعطي هذا المثال مرونة أكثر قليلاً حيث لم يعد من الضروري أن يكون العنصران متجاورين مباشرة.
|
||||
|
||||
3. عندما تقوم بتحريك مؤشر الماوس فوق عنصر ما ، قم بتغيير سليل مباشر.
|
||||
|
||||
`
|
||||
<style>
|
||||
.first:hover > .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">
|
||||
First
|
||||
<div class="second">Second</div>
|
||||
</div>
|
||||
`
|
||||
```html
|
||||
<style>
|
||||
.first:hover > .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">
|
||||
First
|
||||
<div class="second">Second</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
سيعمل الرمز أعلاه على تغيير لون خلفية `.second` إلى blue عند تحريك مؤشر الماوس فوق `.first` .
|
||||
|
||||
4. عندما تقوم بتحريك مؤشر الماوس فوق عنصر ، قم بتغيير سلال عام.
|
||||
|
||||
`
|
||||
<style>
|
||||
.first:hover .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">
|
||||
First
|
||||
<div class="container">
|
||||
Container
|
||||
<div class="second">Second</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
```html
|
||||
<style>
|
||||
.first:hover .second {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="first">
|
||||
First
|
||||
<div class="container">
|
||||
Container
|
||||
<div class="second">Second</div>
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
وكما في المثال 2 ، فإن هذا يمنح المزيد من المرونة حيث أن العنصرين لم يعد من الضروري أن يكونا متجاورين مباشرة. ستلاحظ أن المساحة التي يمكن `.first` أكبر في الأمثلة 3 و 4. يحدث هذا لأنك لا تزال تحوم فوق `.first` ما دام المؤشر فوق أحد أطفاله.
|
||||
|
||||
|
@ -8,16 +8,18 @@ localeTitle: حلقة الوصل
|
||||
|
||||
بناء الجملة العام:
|
||||
|
||||
`target:link
|
||||
`
|
||||
```css
|
||||
target:link
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
`/* Selects any <a> that has not been visited yet */
|
||||
a:link {
|
||||
color: red;
|
||||
}
|
||||
`
|
||||
```css
|
||||
/* Selects any <a> that has not been visited yet */
|
||||
a:link {
|
||||
color: red;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -6,38 +6,41 @@ localeTitle: هيكل CSS
|
||||
|
||||
تتبع قاعدة CSS هذا الهيكل الأساسي:
|
||||
|
||||
`selector {
|
||||
property: value;
|
||||
property: value;
|
||||
}
|
||||
`
|
||||
```CSS
|
||||
selector {
|
||||
property: value;
|
||||
property: value;
|
||||
}
|
||||
```
|
||||
|
||||
كل شيء داخل الأقواس المتعرجة يتناسب مع كل ما يختاره [المختار](https://guide.freecodecamp.org/css/selectors) . يوجد داخل قواعد CSS مجموعة من أزواج [الخصائص](https://guide.freecodecamp.org/css/properties) / القيمة.
|
||||
|
||||
يمكن أن يكون لديك محددات مختلفة مفصولة بغيبوبة:
|
||||
|
||||
`selector1,
|
||||
selector2 {
|
||||
property: value;
|
||||
}
|
||||
`
|
||||
```CSS
|
||||
selector1,
|
||||
selector2 {
|
||||
property: value;
|
||||
}
|
||||
```
|
||||
|
||||
يمكن وضع قواعد CSS متعددة في ملف CSS واحد - إليك مثال على ذلك:
|
||||
|
||||
`h1 {
|
||||
color: red;
|
||||
}
|
||||
|
||||
div {
|
||||
text-align: center;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-left: 2px;
|
||||
margin-top: 100px;
|
||||
}
|
||||
`
|
||||
```CSS
|
||||
h1 {
|
||||
color: red;
|
||||
}
|
||||
|
||||
div {
|
||||
text-align: center;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-left: 2px;
|
||||
margin-top: 100px;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -6,10 +6,11 @@ localeTitle: روابط التصميم
|
||||
|
||||
يمكن تنسيق الارتباطات مع أي خاصية CSS ، مثل `color` ، `font-family` ، و `font-size` ، و `padding` . هنا مثال سهل:
|
||||
|
||||
`a {
|
||||
color: hotpink;
|
||||
}
|
||||
`
|
||||
```css
|
||||
a {
|
||||
color: hotpink;
|
||||
}
|
||||
```
|
||||
|
||||
## بالإضافة إلى ذلك ، يمكن تنسيق الوصلات بشكل مختلف اعتمادًا على الحالة التي توجد فيها.
|
||||
|
||||
@ -40,11 +41,12 @@ localeTitle: روابط التصميم
|
||||
|
||||
إليك بعض نماذج CSS باستخدام الحالات الأربع:
|
||||
|
||||
`a:link { color: red; }
|
||||
a:visited { color: blue; }
|
||||
a:hover { color: green; }
|
||||
a:active { color: blue; }
|
||||
`
|
||||
```css
|
||||
a:link { color: red; }
|
||||
a:visited { color: blue; }
|
||||
a:hover { color: green; }
|
||||
a:active { color: blue; }
|
||||
```
|
||||
|
||||
**لاحظ** أن هناك بعض _قواعد الترتيب_ عندما تقوم بتعيين نمط حالات الارتباط.
|
||||
|
||||
@ -55,23 +57,24 @@ localeTitle: روابط التصميم
|
||||
a: رابط - رابط طبيعي غير مرغوب فيه a: زار - رابط زاره المستخدم a: hover - رابط عندما يضغط المستخدم عليه ج: نشط - رابط لحظة النقر فوقه
|
||||
|
||||
|
||||
`/* unvisited link */
|
||||
a:link {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* visited link */
|
||||
a:visited {
|
||||
color: green;
|
||||
}
|
||||
|
||||
/* mouse over link */
|
||||
a:hover {
|
||||
color: hotpink;
|
||||
}
|
||||
|
||||
/* selected link */
|
||||
a:active {
|
||||
color: blue;
|
||||
}
|
||||
`
|
||||
```css
|
||||
/* unvisited link */
|
||||
a:link {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* visited link */
|
||||
a:visited {
|
||||
color: green;
|
||||
}
|
||||
|
||||
/* mouse over link */
|
||||
a:hover {
|
||||
color: hotpink;
|
||||
}
|
||||
|
||||
/* selected link */
|
||||
a:active {
|
||||
color: blue;
|
||||
}
|
||||
```
|
@ -37,9 +37,10 @@ localeTitle: ظل النص
|
||||
|
||||
المغلق text-shadow: 1px - 2px 5px # a4a4a4؛
|
||||
|
||||
`### Example of multiple shadows
|
||||
Multiple shadows can be used for giving text a solid outline on all 4 directions, like a bubble-writing effect.
|
||||
`
|
||||
```
|
||||
### Example of multiple shadows
|
||||
Multiple shadows can be used for giving text a solid outline on all 4 directions, like a bubble-writing effect.
|
||||
```
|
||||
|
||||
المغلق ظل نص: 1 بكسل × 1 بكسل أسود ، 0 1 بكسل × 1 بكسل أسود ، 1 بكسل × 1 بكسل أسود ، 0 - 1 بكسل × 1 بكسل أسود ؛ \`\` \`
|
||||
|
||||
|
@ -6,17 +6,19 @@ localeTitle: انتقال
|
||||
|
||||
و `transition` الملكية يسمح لك بتغيير قيمة العقارات بشكل سلس (من قيمة واحدة إلى أخرى)، خلال مدة معينة. \`\` \`المغلق الانتقال: كل 300ms.
|
||||
|
||||
`### Transition on Several Property Values
|
||||
|
||||
You can change multiples property values with transition property.
|
||||
`
|
||||
```
|
||||
### Transition on Several Property Values
|
||||
|
||||
You can change multiples property values with transition property.
|
||||
```
|
||||
|
||||
المغلق الانتقال: عرض 300ms ، ارتفاع 2s ؛
|
||||
|
||||
`### Specify the Speed Curve of the Transition
|
||||
|
||||
You can specify a speed curve on an element in transition property.
|
||||
`
|
||||
```
|
||||
### Specify the Speed Curve of the Transition
|
||||
|
||||
You can specify a speed curve on an element in transition property.
|
||||
```
|
||||
|
||||
المغلق الانتقال: ارتفاع 2s خطي؛
|
||||
|
||||
|
@ -14,13 +14,13 @@ localeTitle: دليل لمتخصصي الصف واختياري
|
||||
|
||||
لنفترض أن لديك 5 عناصر في شفرة HTML.
|
||||
|
||||
`
|
||||
<p> First paragraph </p>
|
||||
<p> Second paragraph </p>
|
||||
<p> Third paragraph </p>
|
||||
<p> Fourth paragraph </p>
|
||||
<p> Fifth paragraph </p>
|
||||
`
|
||||
```html
|
||||
<p> First paragraph </p>
|
||||
<p> Second paragraph </p>
|
||||
<p> Third paragraph </p>
|
||||
<p> Fourth paragraph </p>
|
||||
<p> Fifth paragraph </p>
|
||||
```
|
||||
|
||||
يمكنك إعطاء كل منهم لون خط أحمر باستخدام CSS.
|
||||
|
||||
@ -43,12 +43,12 @@ _فئة وهوية للانقاذ_
|
||||
|
||||
هكذا تعمل `class` . يمكنك إعطاء مجموعة من العناصر فئة وستكون في نادٍ واحد. تماما مثل قاعدة جديدة في النادي يجب أن يتبعها جميع أعضاء النادي ، وبالمثل ، يتم تطبيق جميع قواعد نمط جديد على عناصر في نفس النادي.
|
||||
|
||||
`
|
||||
<p class="bike"> Hayabusa </p>
|
||||
<p class="car"> Chevrolet </p>
|
||||
<p class="bike"> Hayley-Davidson </p>
|
||||
<p class="car"> Lamborghini </p>
|
||||
`
|
||||
```html
|
||||
<p class="bike"> Hayabusa </p>
|
||||
<p class="car"> Chevrolet </p>
|
||||
<p class="bike"> Hayley-Davidson </p>
|
||||
<p class="car"> Lamborghini </p>
|
||||
```
|
||||
|
||||
هنا لدينا 4 فقرات. إذا نظرت إلى أسماء الفصل ، فهناك "ناديان". الآن يمكننا اختيار النادي (أو المجموعة) التي نريدها وتطبيق الأنماط التي نريدها عليهم.
|
||||
|
||||
@ -67,15 +67,15 @@ _فئة وهوية للانقاذ_
|
||||
|
||||
هذا هو معرف. تماما مثل بطاقات الهوية الشخصية ، يمكن أن يكون عنصر HTML واحد فقط `id` معين. لا عناصر لهما نفس `id` .
|
||||
|
||||
`
|
||||
<p id="car"> Ferrari </p>
|
||||
<p id="car"> Ford </p>
|
||||
<!-- This is incorrect-->
|
||||
|
||||
<p id="harley"> Harley-Davidson </p>
|
||||
<p id="hayabusa"> Hayabusa </p>
|
||||
<!--This is correct since an id is only used once.-->
|
||||
`
|
||||
```html
|
||||
<p id="car"> Ferrari </p>
|
||||
<p id="car"> Ford </p>
|
||||
<!-- This is incorrect-->
|
||||
|
||||
<p id="harley"> Harley-Davidson </p>
|
||||
<p id="hayabusa"> Hayabusa </p>
|
||||
<!--This is correct since an id is only used once.-->
|
||||
```
|
||||
|
||||
يمكن أن يكون `id` أيضًا مشابهًا للمفتاح الخاص لخزانة الخزانة في النادي. كل شخص في النادي لديه نفس بطاقة الهوية الخاصة بالنادي ، لكن مفتاح خزانة كل شخص مختلف وفريد.
|
||||
|
||||
|
@ -8,14 +8,15 @@ localeTitle: CSS المختارات الغش ورقة
|
||||
|
||||
هنا مثال على استخدام المحددات. في التعليمة البرمجية التالية ، تكون `a` و `h1` محددات:
|
||||
|
||||
`a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size 24px;
|
||||
}
|
||||
`
|
||||
```css
|
||||
a {
|
||||
color: black;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size 24px;
|
||||
}
|
||||
```
|
||||
|
||||
## قائمة الغش من المحددات
|
||||
|
||||
|
@ -12,37 +12,41 @@ localeTitle: مقدمة في CSS
|
||||
|
||||
تسمح CSS لمعلمات بتوضيح كيفية ظهور كل جزء من محتوى المطابقة.
|
||||
|
||||
`body {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rebeccapurple;
|
||||
text-decoration: underline;
|
||||
}
|
||||
`
|
||||
```CSS
|
||||
body {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: rebeccapurple;
|
||||
text-decoration: underline;
|
||||
}
|
||||
```
|
||||
|
||||
### استخدام المغلق
|
||||
|
||||
تسمح **أوراق الأنماط الخارجية** لصفحات كثيرة بمشاركة نفس الأنماط.
|
||||
|
||||
`<link href="styles.css" rel="stylesheet" type="text/css">
|
||||
`
|
||||
```HTML
|
||||
<link href="styles.css" rel="stylesheet" type="text/css">
|
||||
```
|
||||
|
||||
تطبق **أوراق الأنماط الداخلية** CSS على كل العلامات المطابقة في الصفحة.
|
||||
|
||||
`<style>
|
||||
h1 {
|
||||
font-family: sans-serif;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
</style>
|
||||
`
|
||||
```HTML
|
||||
<style>
|
||||
h1 {
|
||||
font-family: sans-serif;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
تطبق **CSS مضمنة** الأنماط على علامة واحدة.
|
||||
|
||||
`<img src="..." style="border: 1px solid red;" />
|
||||
`
|
||||
```HTML
|
||||
<img src="..." style="border: 1px solid red;" />
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -58,15 +58,15 @@ localeTitle: وحدات
|
||||
|
||||
مثال
|
||||
|
||||
`
|
||||
p {
|
||||
font-size: 24px;
|
||||
}
|
||||
div {
|
||||
width: 3in;
|
||||
border-width: 3pt;
|
||||
}
|
||||
`
|
||||
```html
|
||||
p {
|
||||
font-size: 24px;
|
||||
}
|
||||
div {
|
||||
width: 3in;
|
||||
border-width: 3pt;
|
||||
}
|
||||
```
|
||||
|
||||
ستظهر `font-size: 24px` بكسل على أنها 24 بكسل على الهاتف أو الجهاز اللوحي أو شاشة سطح المكتب.
|
||||
|
||||
|
@ -21,11 +21,11 @@ localeTitle: استخدام الرسوم المتحركة CSS
|
||||
|
||||
في جزء HTML ، سيكون لدينا مستند `div` مع `container` للفئة و `h3` مع النص `Hello World` :
|
||||
|
||||
`
|
||||
<div class="container">
|
||||
<h3> Hello World ! </h3>
|
||||
</div>
|
||||
`
|
||||
```html
|
||||
<div class="container">
|
||||
<h3> Hello World ! </h3>
|
||||
</div>
|
||||
```
|
||||
|
||||
بالنسبة لجزء CSS:
|
||||
|
||||
|
@ -8,10 +8,11 @@ localeTitle: عمودي محاذاة CSS
|
||||
|
||||
على سبيل المثال ، يمكنك أن تكون `vertical-align` مثل هذه لمحاذاة صورة:
|
||||
|
||||
`img {
|
||||
vertical-align: top;
|
||||
}
|
||||
`
|
||||
```
|
||||
img {
|
||||
vertical-align: top;
|
||||
}
|
||||
```
|
||||
|
||||
هذه هي القيم الصالحة `vertical-align` :
|
||||
|
||||
|
@ -24,10 +24,11 @@ localeTitle: خطوط الويب الآمنة
|
||||
|
||||
تجدر الإشارة إلى أنه يجب استخدام مداخلات الخط مع خيارات الاحتياطي بما في ذلك عائلة الخطوط العامة حتى إذا كان التصميم الخاص بك يستخدم الخطوط الآمنة للويب فقط. فمثلا:
|
||||
|
||||
`p {
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
}
|
||||
`
|
||||
```css
|
||||
p {
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
}
|
||||
```
|
||||
|
||||
#### ملاحظة على خطوط الويب
|
||||
|
||||
|
@ -6,10 +6,11 @@ localeTitle: سوف يتغير
|
||||
|
||||
تسمح لك خاصية will-change بإخبار المتصفح عن التلاعبات التي ستحدث مع العنصر من أجل تحسينها.
|
||||
|
||||
`.container {
|
||||
will-change: transform;
|
||||
}
|
||||
`
|
||||
```css
|
||||
.container {
|
||||
will-change: transform;
|
||||
}
|
||||
```
|
||||
|
||||
سيتم استخدام خاصية will-change في الفئة `.container` ، في هذه الحالة ، قد يحدث أو لا يحدث التحويل على العنصر.
|
||||
|
||||
|
@ -10,20 +10,21 @@ Z Index ( `z-index` ) هي خاصية CSS تقوم بتعريف ترتيب عن
|
||||
|
||||
#### القيم الممكنة
|
||||
|
||||
`/* Default value if not specified */
|
||||
z-index: auto;
|
||||
|
||||
/* Integer values */
|
||||
z-index: 1;
|
||||
z-index: 100;
|
||||
z-index: 9999;
|
||||
z-index: -1;
|
||||
|
||||
/* Global values */
|
||||
z-index: inherit;
|
||||
z-index: initial;
|
||||
z-index: unset;
|
||||
`
|
||||
```css
|
||||
/* Default value if not specified */
|
||||
z-index: auto;
|
||||
|
||||
/* Integer values */
|
||||
z-index: 1;
|
||||
z-index: 100;
|
||||
z-index: 9999;
|
||||
z-index: -1;
|
||||
|
||||
/* Global values */
|
||||
z-index: inherit;
|
||||
z-index: initial;
|
||||
z-index: unset;
|
||||
```
|
||||
|
||||
#### مثال للاستخدام
|
||||
|
||||
@ -31,28 +32,29 @@ Z Index ( `z-index` ) هي خاصية CSS تقوم بتعريف ترتيب عن
|
||||
|
||||
_HTML_
|
||||
|
||||
`
|
||||
<div class="container">
|
||||
<div class="box" id="blue"></div>
|
||||
<div class="box" id="red"></div>
|
||||
<div class="box" id="green"></div>
|
||||
</div>
|
||||
`
|
||||
```html
|
||||
<div class="container">
|
||||
<div class="box" id="blue"></div>
|
||||
<div class="box" id="red"></div>
|
||||
<div class="box" id="green"></div>
|
||||
</div>
|
||||
```
|
||||
|
||||
_CSS_
|
||||
|
||||
`#blue {
|
||||
background-color: blue;
|
||||
}
|
||||
|
||||
#red {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
#green {
|
||||
background-color: green;
|
||||
}
|
||||
`
|
||||
```css
|
||||
#blue {
|
||||
background-color: blue;
|
||||
}
|
||||
|
||||
#red {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
#green {
|
||||
background-color: green;
|
||||
}
|
||||
```
|
||||
|
||||
بما أنه لم يتم تعريف `z-index` ، فستكون له قيمة افتراضية من `auto` . هذه نتيجة:
|
||||
|
||||
@ -60,21 +62,22 @@ _CSS_
|
||||
|
||||
حاول تغيير الترتيب إلى الأخضر والأزرق والأحمر في CSS باستخدام `z-index` .
|
||||
|
||||
`#blue {
|
||||
background-color: blue;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#red {
|
||||
background-color: red;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#green {
|
||||
background-color: green;
|
||||
z-index: 3;
|
||||
}
|
||||
`
|
||||
```css
|
||||
#blue {
|
||||
background-color: blue;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#red {
|
||||
background-color: red;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#green {
|
||||
background-color: green;
|
||||
z-index: 3;
|
||||
}
|
||||
```
|
||||
|
||||
ستكون النتيجة الخاصة بك:
|
||||
|
||||
@ -82,10 +85,11 @@ _CSS_
|
||||
|
||||
استخدم Z Index إذا كنت بحاجة إلى وضع عنصر خلفية أسفل الحاوية. يمكنك وضع الخلفية بسهولة تحت كل عنصر عن طريق إعطائها مؤشر Z سلبي مثل أدناه:
|
||||
|
||||
`#background {
|
||||
z-index: -1;
|
||||
}
|
||||
`
|
||||
```css
|
||||
#background {
|
||||
z-index: -1;
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -8,16 +8,16 @@ localeTitle: إعداد D3
|
||||
|
||||
ابدأ بصفحة HTML الأساسية على الويب:
|
||||
|
||||
`
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<p>Hello!</p>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<p>Hello!</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
الذي يظهر في المتصفح:
|
||||
|
||||
|
@ -14,10 +14,11 @@ Apache Flink هو إطار مفتوح المصدر لتجهيز التدفق م
|
||||
* جافا 7 أو 8
|
||||
* IntelliJ IDEA أو Eclipse IDE
|
||||
|
||||
`git clone https://github.com/apache/flink.git
|
||||
cd flink
|
||||
mvn clean package -DskipTests # this will take up to 10 minutes
|
||||
`
|
||||
```
|
||||
git clone https://github.com/apache/flink.git
|
||||
cd flink
|
||||
mvn clean package -DskipTests # this will take up to 10 minutes
|
||||
```
|
||||
|
||||
### قواعد البيانات
|
||||
|
||||
@ -33,18 +34,19 @@ Apache Flink هو إطار مفتوح المصدر لتجهيز التدفق م
|
||||
|
||||
أول شيء سنقوم به هو إنشاء بيئة التنفيذ وتحميل ملفات csv في مجموعة بيانات. مثله:
|
||||
|
||||
`ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
|
||||
DataSet<Tuple3<Long, String, String>> movies = env.readCsvFile("ml-latest-small/movies.csv")
|
||||
.ignoreFirstLine()
|
||||
.parseQuotedStrings('"')
|
||||
.ignoreInvalidLines()
|
||||
.types(Long.class, String.class, String.class);
|
||||
|
||||
DataSet<Tuple2<Long, Double>> ratings = env.readCsvFile("ml-latest-small/ratings.csv")
|
||||
.ignoreFirstLine()
|
||||
.includeFields(false, true, true, false)
|
||||
.types(Long.class, Double.class);
|
||||
`
|
||||
```
|
||||
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
|
||||
DataSet<Tuple3<Long, String, String>> movies = env.readCsvFile("ml-latest-small/movies.csv")
|
||||
.ignoreFirstLine()
|
||||
.parseQuotedStrings('"')
|
||||
.ignoreInvalidLines()
|
||||
.types(Long.class, String.class, String.class);
|
||||
|
||||
DataSet<Tuple2<Long, Double>> ratings = env.readCsvFile("ml-latest-small/ratings.csv")
|
||||
.ignoreFirstLine()
|
||||
.includeFields(false, true, true, false)
|
||||
.types(Long.class, Double.class);
|
||||
```
|
||||
|
||||
هناك ، نحن نجعل مجموعة البيانات مع للأفلام ، وتجاهل الأخطاء ، والاقتباسات ، وخط الرأس ، ومجموعة البيانات مع بالنسبة إلى تقييمات الأفلام ، مع تجاهل أيضًا الرأس ، والخطوط والعروض غير الصالحة.
|
||||
|
||||
@ -54,40 +56,41 @@ Apache Flink هو إطار مفتوح المصدر لتجهيز التدفق م
|
||||
|
||||
أولاً سننضم إلى مجموعة بيانات التصنيفات مع مجموعة بيانات الأفلام حسب الأفلام الموجودة في كل مجموعة بيانات. مع هذا سنقوم بإنشاء Tuple جديد مع اسم الفيلم والنوع والنتيجة. في وقت لاحق ، نقوم بتجميع هذه المجموعة حسب النوع وإضافة مجموع كل الأنواع المتساوية ، وأخيرا نقسم النتيجة على مجموع النتائج ولدينا النتيجة المرجوة.
|
||||
|
||||
`List<Tuple2<String, Double>> distribution = movies.join(ratings)
|
||||
.where(0)
|
||||
.equalTo(0)
|
||||
.with(new JoinFunction<Tuple3<Long, String, String>,Tuple2<Long, Double>, Tuple3<StringValue, StringValue, DoubleValue>>() {
|
||||
private StringValue name = new StringValue();
|
||||
private StringValue genre = new StringValue();
|
||||
private DoubleValue score = new DoubleValue();
|
||||
private Tuple3<StringValue, StringValue, DoubleValue> result = new Tuple3<>(name,genre,score);
|
||||
|
||||
@Override
|
||||
public Tuple3<StringValue, StringValue, DoubleValue> join(Tuple3<Long, String, String> movie,Tuple2<Long, Double> rating) throws Exception {
|
||||
name.setValue(movie.f1);
|
||||
genre.setValue(movie.f2.split("\\|")[0]);
|
||||
score.setValue(rating.f1);
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.groupBy(1)
|
||||
.reduceGroup(new GroupReduceFunction<Tuple3<StringValue,StringValue,DoubleValue>, Tuple2<String, Double>>() {
|
||||
@Override
|
||||
public void reduce(Iterable<Tuple3<StringValue,StringValue,DoubleValue>> iterable, Collector<Tuple2<String, Double>> collector) throws Exception {
|
||||
StringValue genre = null;
|
||||
int count = 0;
|
||||
double totalScore = 0;
|
||||
for(Tuple3<StringValue,StringValue,DoubleValue> movie: iterable){
|
||||
genre = movie.f1;
|
||||
totalScore += movie.f2.getValue();
|
||||
count++;
|
||||
}
|
||||
|
||||
collector.collect(new Tuple2<>(genre.getValue(), totalScore/count));
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
`
|
||||
```
|
||||
List<Tuple2<String, Double>> distribution = movies.join(ratings)
|
||||
.where(0)
|
||||
.equalTo(0)
|
||||
.with(new JoinFunction<Tuple3<Long, String, String>,Tuple2<Long, Double>, Tuple3<StringValue, StringValue, DoubleValue>>() {
|
||||
private StringValue name = new StringValue();
|
||||
private StringValue genre = new StringValue();
|
||||
private DoubleValue score = new DoubleValue();
|
||||
private Tuple3<StringValue, StringValue, DoubleValue> result = new Tuple3<>(name,genre,score);
|
||||
|
||||
@Override
|
||||
public Tuple3<StringValue, StringValue, DoubleValue> join(Tuple3<Long, String, String> movie,Tuple2<Long, Double> rating) throws Exception {
|
||||
name.setValue(movie.f1);
|
||||
genre.setValue(movie.f2.split("\\|")[0]);
|
||||
score.setValue(rating.f1);
|
||||
return result;
|
||||
}
|
||||
})
|
||||
.groupBy(1)
|
||||
.reduceGroup(new GroupReduceFunction<Tuple3<StringValue,StringValue,DoubleValue>, Tuple2<String, Double>>() {
|
||||
@Override
|
||||
public void reduce(Iterable<Tuple3<StringValue,StringValue,DoubleValue>> iterable, Collector<Tuple2<String, Double>> collector) throws Exception {
|
||||
StringValue genre = null;
|
||||
int count = 0;
|
||||
double totalScore = 0;
|
||||
for(Tuple3<StringValue,StringValue,DoubleValue> movie: iterable){
|
||||
genre = movie.f1;
|
||||
totalScore += movie.f2.getValue();
|
||||
count++;
|
||||
}
|
||||
|
||||
collector.collect(new Tuple2<>(genre.getValue(), totalScore/count));
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
```
|
||||
|
||||
مع هذا سيكون لديك تطبيق حرفة معالجة دفعة واحدة. استمتع!.
|
@ -45,10 +45,11 @@ Apache Flink هو إطار مفتوح المصدر لتجهيز التدفق م
|
||||
* مي Mن (نوصي بالإصدار 3.0.4)
|
||||
* جافا 7 أو 8
|
||||
|
||||
`git clone https://github.com/apache/flink.git
|
||||
cd flink
|
||||
mvn clean package -DskipTests # this will take up to 10 minutes
|
||||
`
|
||||
```
|
||||
git clone https://github.com/apache/flink.git
|
||||
cd flink
|
||||
mvn clean package -DskipTests # this will take up to 10 minutes
|
||||
```
|
||||
|
||||
## تطوير فلينك
|
||||
|
||||
|
@ -12,8 +12,9 @@ localeTitle: الباندا
|
||||
|
||||
هو اصطلاح يستخدم على نطاق واسع لاستيراد مكتبة الباندا باستخدام الاسم المستعار `pd` :
|
||||
|
||||
`import pandas as pd
|
||||
`
|
||||
```python
|
||||
import pandas as pd
|
||||
```
|
||||
|
||||
## إطارات البيانات
|
||||
|
||||
@ -27,8 +28,9 @@ localeTitle: الباندا
|
||||
|
||||
ملف `.csv` هو ملف _قيمة مفصولة بفواصل_ . طريقة شائعة جدا لتخزين البيانات. لتحميل هذه البيانات في إطار بيانات `read_csv` ، استخدم الطريقة `read_csv` :
|
||||
|
||||
`df = pd.read_csv(file_path)
|
||||
`
|
||||
```python
|
||||
df = pd.read_csv(file_path)
|
||||
```
|
||||
|
||||
هنا ، يمكن أن يكون `file_path` مسارًا محليًا لملف csv على جهاز الكمبيوتر الخاص بك ، أو عنوان url يشير إلى واحد. قد يتم تضمين أسماء الأعمدة في ملف csv ، أو قد يتم تمريرها كوسيطة. لمزيد من المعلومات حول هذا ، وأكثر من ذلك بكثير ، ألق نظرة على [الوثائق](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html?highlight=read_csv#pandas.read_csv) .
|
||||
|
||||
@ -36,22 +38,25 @@ localeTitle: الباندا
|
||||
|
||||
لإظهار الصفوف القليلة الأولى من إطار البيانات ، تكون طريقة `head` مفيدة (مرة أخرى يجب أن يبدو هذا مألوفًا لمبرمجي R):
|
||||
|
||||
`df.head()
|
||||
`
|
||||
```python
|
||||
df.head()
|
||||
```
|
||||
|
||||
سيظهر هذا الصفوف الخمسة الأولى من إطار البيانات.
|
||||
|
||||
لعرض أكثر من أول 5 صفوف ، قم ببساطة بوضع عدد الصفوف التي تريد طباعتها داخل طريقة `head` .
|
||||
|
||||
`df.head(10)
|
||||
`
|
||||
```python
|
||||
df.head(10)
|
||||
```
|
||||
|
||||
سيظهر هذا أول 10 صفوف من إطار البيانات.
|
||||
|
||||
لإظهار الصفوف القليلة الأخيرة من إطار البيانات ، تكون طريقة `tail` مفيدة (مرة أخرى يجب أن يبدو هذا مألوفًا لمبرمجي R):
|
||||
|
||||
`df.tail()
|
||||
`
|
||||
```python
|
||||
df.tail()
|
||||
```
|
||||
|
||||
سيظهر هذا آخر 5 صفوف من إطار البيانات.
|
||||
|
||||
@ -59,8 +64,9 @@ localeTitle: الباندا
|
||||
|
||||
يمكن أن يكون إطار البيانات جزئيًا بعدة طرق. واحد من أبسط هو الحصول على عمود واحد. على سبيل المثال ، إذا كان إطار البيانات `df` يحتوي على عمود اسمه `age` ، فيمكننا استخلاصه كما يلي:
|
||||
|
||||
`ages=df["age"]
|
||||
`
|
||||
```python
|
||||
ages=df["age"]
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -34,10 +34,11 @@ Docker هو برنامج مفتوح المصدر يهدف إلى تسهيل نش
|
||||
|
||||
بمجرد تثبيت حاول هذا
|
||||
|
||||
`$ docker run hello-world
|
||||
|
||||
Hello from Docker!
|
||||
`
|
||||
```
|
||||
$ docker run hello-world
|
||||
|
||||
Hello from Docker!
|
||||
```
|
||||
|
||||
تظهر هذه الرسالة أن التثبيت الخاص بك يبدو أنه يعمل بشكل صحيح.
|
||||
|
||||
|
@ -32,20 +32,21 @@ localeTitle: أرض
|
||||
|
||||
#### package.json
|
||||
|
||||
`{
|
||||
"name": "project-name",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"grunt": "latest",
|
||||
"grunt-contrib-htmlmin": "latest",
|
||||
"grunt-postcss": "latest",
|
||||
"autoprefixer": "latest",
|
||||
"cssnano": "latest",
|
||||
"grunt-contrib-uglify": "latest",
|
||||
"grunt-contrib-imagemin": "latest",
|
||||
}
|
||||
}
|
||||
`
|
||||
```json
|
||||
{
|
||||
"name": "project-name",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"grunt": "latest",
|
||||
"grunt-contrib-htmlmin": "latest",
|
||||
"grunt-postcss": "latest",
|
||||
"autoprefixer": "latest",
|
||||
"cssnano": "latest",
|
||||
"grunt-contrib-uglify": "latest",
|
||||
"grunt-contrib-imagemin": "latest",
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Gruntfile.js
|
||||
|
||||
|
@ -23,32 +23,35 @@ localeTitle: بلع
|
||||
|
||||
لبدء استخدام `Gulp` ، فإن الخطوة الأولى هي تثبيته باستخدام `npm` . بعد تثبيته ، يجب إنشاء ملف `gulpfile.js` . ملف `gulpfile` هذا هو ملف يحتوي على جميع مهام `Gulp` التي يجب تشغيلها كجزء من العملية التلقائية. تتم كتابة المهام في JavaScript. في ما يلي مثال بسيط جدًا `gulpfile` ، والذي يأخذ أي ملفات `CSS` من مجلد `client/templates` ، ويقللها ويضع الملف المُصغر في المجلد `build/css` .
|
||||
|
||||
`var gulp = require('gulp');
|
||||
var minifyCSS = require('gulp-csso');
|
||||
|
||||
gulp.task('css', function(){
|
||||
return gulp.src('client/templates/*.css')
|
||||
.pipe(minifyCSS())
|
||||
.pipe(gulp.dest('build/css'))
|
||||
});
|
||||
`
|
||||
```javascript
|
||||
var gulp = require('gulp');
|
||||
var minifyCSS = require('gulp-csso');
|
||||
|
||||
gulp.task('css', function(){
|
||||
return gulp.src('client/templates/*.css')
|
||||
.pipe(minifyCSS())
|
||||
.pipe(gulp.dest('build/css'))
|
||||
});
|
||||
```
|
||||
|
||||
لتشغيل مهمة gulp هذه ، كل ما عليك فعله هو كتابة `gulp css` في مطراف في جذر مشروعك.
|
||||
|
||||
لمشاهدة ملفات CSS لأية تغييرات وتشغيل مهمة "css" بعد حفظها.
|
||||
|
||||
`gulp.watch('css')
|
||||
.on('change', ['css']);
|
||||
`
|
||||
```javascript
|
||||
gulp.watch('css')
|
||||
.on('change', ['css']);
|
||||
```
|
||||
|
||||
### تبعيات المهام
|
||||
|
||||
افتراضيا سيتم تشغيل جولبول جميع المهام المحددة في نفس الوقت وانتظر شيئا. لتشغيل مهمة متعددة بالترتيب الصحيح ، يمكنك إضافة مهمة كتوابع إلى مهمة أخرى.
|
||||
|
||||
`gulp.task('two', ['one'], function() {
|
||||
// task 'one' is done now
|
||||
});
|
||||
`
|
||||
```javascript
|
||||
gulp.task('two', ['one'], function() {
|
||||
// task 'one' is done now
|
||||
});
|
||||
```
|
||||
|
||||
مع رمز المقتطف أعلاه، مهمة `two` سيتم تشغيل فقط بعد مهمة `one` اكتمال.
|
||||
|
||||
|
@ -8,59 +8,68 @@ localeTitle: npm ورقة الغش
|
||||
|
||||
## تثبيت التبعية `package.json`
|
||||
|
||||
`npm install
|
||||
`
|
||||
```shell
|
||||
npm install
|
||||
```
|
||||
|
||||
**اختزال**
|
||||
|
||||
`# install
|
||||
npm i <package>
|
||||
# uninstall
|
||||
npm un <package>
|
||||
# update
|
||||
npm up <package>
|
||||
`
|
||||
```shell
|
||||
# install
|
||||
npm i <package>
|
||||
# uninstall
|
||||
npm un <package>
|
||||
# update
|
||||
npm up <package>
|
||||
```
|
||||
|
||||
## قائمة الحزم المثبتة عالميا.
|
||||
|
||||
`npm list -g --depth=0
|
||||
`
|
||||
```shell
|
||||
npm list -g --depth=0
|
||||
```
|
||||
|
||||
## إلغاء حزمة عالمية
|
||||
|
||||
`npm -g uninstall <name>
|
||||
`
|
||||
```shell
|
||||
npm -g uninstall <name>
|
||||
```
|
||||
|
||||
## ترقية NPM على ويندوز
|
||||
|
||||
بعد محاولة عدة مرات لترقية npm على Windows وجدت هذا في حين بدس في مجلدات npm.
|
||||
|
||||
`npm-windows-upgrade
|
||||
`
|
||||
```shell
|
||||
npm-windows-upgrade
|
||||
```
|
||||
|
||||
## تحديث الحزم العالمية
|
||||
|
||||
لمعرفة الحزم التي تحتاج إلى تحديث ، استخدم:
|
||||
|
||||
`npm outdated -g --depth=0
|
||||
`
|
||||
```shell
|
||||
npm outdated -g --depth=0
|
||||
```
|
||||
|
||||
لتحديث الحزم العالمية بشكل فردي ، يمكنك استخدام:
|
||||
|
||||
`npm update -g <package> <package> <package>
|
||||
`
|
||||
```shell
|
||||
npm update -g <package> <package> <package>
|
||||
```
|
||||
|
||||
## قائمة البرامج النصية المتاحة لتشغيل
|
||||
|
||||
`npm run
|
||||
`
|
||||
```shell
|
||||
npm run
|
||||
```
|
||||
|
||||
## تحديث npm
|
||||
|
||||
`npm install -g npm@latest
|
||||
# using windows? Then use
|
||||
npm-windows-upgrade
|
||||
`
|
||||
```shell
|
||||
npm install -g npm@latest
|
||||
# using windows? Then use
|
||||
npm-windows-upgrade
|
||||
```
|
||||
|
||||
## الأعلام
|
||||
|
||||
@ -68,26 +77,30 @@ localeTitle: npm ورقة الغش
|
||||
|
||||
## النسخة المثبتة
|
||||
|
||||
`npm list # for local packages
|
||||
`
|
||||
```shell
|
||||
npm list # for local packages
|
||||
```
|
||||
|
||||
## عقدة مدير الإصدار `nvm`
|
||||
|
||||
لنفترض أنك تريد تثبيت Node v6.9.1 الذي تكتبه على الجهاز:
|
||||
|
||||
`nvm install 6
|
||||
`
|
||||
```shell
|
||||
nvm install 6
|
||||
```
|
||||
|
||||
إذا كان لديك إصدارات متعددة من Node.js مثبتة على مساحة العمل الخاصة بك ، يمكنك التبديل إلى إصدار محدد بالكتابة:
|
||||
|
||||
`nvm use 4.8.4
|
||||
`
|
||||
```shell
|
||||
nvm use 4.8.4
|
||||
```
|
||||
|
||||
### جعل نسخة عقدة الافتراضي.
|
||||
|
||||
لتعيين إصدار افتراضي من العقدة لمساحة العمل الخاصة بك ، فقط اكتب:
|
||||
|
||||
`nvm alias default 6
|
||||
`
|
||||
```shell
|
||||
nvm alias default 6
|
||||
```
|
||||
|
||||
حيث كان الإصدار 6 هو الإصدار الذي تريد استخدامه كإعداد افتراضي.
|
@ -19,20 +19,23 @@ npm مفيد ليس فقط للمشروعات من جانب الخادم. تتو
|
||||
|
||||
يستخدم npm عادة من سطر الأوامر. يمكن القول أن الأوامر الواردة أدناه هي الأكثر أهمية للبدء:
|
||||
|
||||
`npm init
|
||||
`
|
||||
```
|
||||
npm init
|
||||
```
|
||||
|
||||
تشغيل هذا الأمر في الدليل الجذر لمشروعك يهيئه للاستخدام مع npm عن طريق إنشاء ملف `package.json` . ستطالب ل اسم المشروع والوصف واسم المؤلف وأكثر من ذلك. ثم يتم استخدام هذه المعلومات لملء ملف `package.json` ، والتي سوف تعقد أيضا معلومات حول تبعيات المشروع ومتطلباته. يمكنك تغيير هذه المعلومات يدويًا في وقت لاحق.
|
||||
|
||||
`npm install [name-of-package]
|
||||
`
|
||||
```
|
||||
npm install [name-of-package]
|
||||
```
|
||||
|
||||
يقوم هذا بتثبيت حزمة وكل تبعياتها تلقائيًا وحفظها في ملف `package.json` . إذا كنت تقوم بتثبيت تبعية تطوير ، قد ترغب في استخدام `--save-dev` أو `-D` التبديل. سيحفظ npm الحزمة كاعتمادية تطوير.
|
||||
|
||||
يتم تثبيت الحزم محليًا في الدليل `node_modules` في الدليل الجذر لمشروعك. في بعض الأحيان قد ترغب في الحصول على حزمة متاحة عبر مشاريع مختلفة. يتم ذلك باستخدام مفتاح `--global` أو `-g` . هذا مفيد في كثير من الأحيان لأدوات التطوير والأدوات المساعدة لسطر الأوامر.
|
||||
|
||||
`npm install
|
||||
`
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
تشغيل تثبيت npm في الدليل الجذر للمشروع دون اسم حزمة معينة ، تثبيت كافة التبعيات المطلوبة لهذا المشروع. هؤلاء يكونون محسوبًا وفقًا لملف `package.json` للمشروع. هذا يدل على قوة npm ، حيث يمكن لأمر واحد جلب عشرات أو مئات من تبعية تلقائيا بالنسبة لك ، ومفيد عند `git clone` مستودع ، على سبيل المثال.
|
||||
|
||||
|
@ -30,27 +30,30 @@ Vagrant هو أداة لبناء وإدارة بيئات الجهاز الظاه
|
||||
|
||||
بعد تثبيت Vagrant ، تحقق من عمل التثبيت عن طريق فتح موجه أوامر أو وحدة تحكم جديدة ، وتحقق من توفر المتشرد:
|
||||
|
||||
`$ vagrant
|
||||
Usage: vagrant [options] <command> [<args>]
|
||||
|
||||
-v, --version Print the version and exit.
|
||||
-h, --help Print this help.
|
||||
|
||||
# ...
|
||||
`
|
||||
```bash
|
||||
$ vagrant
|
||||
Usage: vagrant [options] <command> [<args>]
|
||||
|
||||
-v, --version Print the version and exit.
|
||||
-h, --help Print this help.
|
||||
|
||||
# ...
|
||||
```
|
||||
|
||||
### ابدء
|
||||
|
||||
`$ vagrant init hashicorp/precise64
|
||||
$ vagrant up
|
||||
`
|
||||
```bash
|
||||
$ vagrant init hashicorp/precise64
|
||||
$ vagrant up
|
||||
```
|
||||
|
||||
### مربعات
|
||||
|
||||
تتم إضافة صناديق إلى Vagrant مع إضافة مربع المتشرد. يقوم هذا بتخزين المربع تحت اسم محدد بحيث يمكن لبيئات Vagrant المتعددة إعادة استخدامه. إذا لم تكن قد أضفت مربعًا حتى الآن ، فيمكنك القيام بذلك الآن:
|
||||
|
||||
`$ vagrant box add hashicorp/precise64
|
||||
`
|
||||
```bash
|
||||
$ vagrant box add hashicorp/precise64
|
||||
```
|
||||
|
||||
### العثور على المزيد من الصناديق
|
||||
|
||||
|
@ -18,57 +18,64 @@ Yarn هو مدير حزم لرمزك. يسمح لك باستخدام ومشار
|
||||
|
||||
**بدء مشروع جديد**
|
||||
|
||||
`yarn init
|
||||
`
|
||||
```
|
||||
yarn init
|
||||
```
|
||||
|
||||
سيفتح الأمر `yarn init` نموذجًا تفاعليًا لإنشاء مشروع غزل. ينشئ `yarn init` `package.json` ملف `package.json` يخزن المعلومات حول مشروعك. سيتم فتح هذا النموذج التفاعلي بالأسئلة التالية:
|
||||
|
||||
`name (your-project):
|
||||
version (1.0.0):
|
||||
description:
|
||||
entry point (index.js):
|
||||
git repository:
|
||||
author:
|
||||
license (MIT):
|
||||
`
|
||||
```
|
||||
name (your-project):
|
||||
version (1.0.0):
|
||||
description:
|
||||
entry point (index.js):
|
||||
git repository:
|
||||
author:
|
||||
license (MIT):
|
||||
```
|
||||
|
||||
يمكنك إما كتابة الإجابات لكل خيار أو فقط اضغط على إدخال دون كتابة أي شيء لاستخدام الافتراضي أو ترك فارغ. يمكنك دائمًا الانتقال إلى محرر النصوص المفضل لديك لتغيير ملف `package.json` ، إذا لزم الأمر.
|
||||
|
||||
يجب أن يكون ملف `package.json` الخاص بك مشابهاً لهذا:
|
||||
|
||||
`{
|
||||
"name": "your-new-project",
|
||||
"version": "1.0.0",
|
||||
"description": "A description of your new project.",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"url": "https://github.com/your-username/your-new-project",
|
||||
"type": "git"
|
||||
},
|
||||
"author": "Your Name <your_name@example.com>",
|
||||
"license": "MIT"
|
||||
}
|
||||
`
|
||||
```
|
||||
{
|
||||
"name": "your-new-project",
|
||||
"version": "1.0.0",
|
||||
"description": "A description of your new project.",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"url": "https://github.com/your-username/your-new-project",
|
||||
"type": "git"
|
||||
},
|
||||
"author": "Your Name <your_name@example.com>",
|
||||
"license": "MIT"
|
||||
}
|
||||
```
|
||||
|
||||
**إضافة تبعية**
|
||||
|
||||
`yarn add [package]
|
||||
`
|
||||
```
|
||||
yarn add [package]
|
||||
```
|
||||
|
||||
**ترقية التبعية**
|
||||
|
||||
`yarn upgrade [package]
|
||||
`
|
||||
```
|
||||
yarn upgrade [package]
|
||||
```
|
||||
|
||||
**إزالة التبعية**
|
||||
|
||||
`yarn remove [package]
|
||||
`
|
||||
```
|
||||
yarn remove [package]
|
||||
```
|
||||
|
||||
**تثبيت جميع تبعيات المشروع**
|
||||
|
||||
`yarn install
|
||||
`
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -12,24 +12,28 @@ Ansible هو أداة سهلة الاستخدام الآلي. يمكن استخ
|
||||
|
||||
تأكد أولاً من أن النظام محدث.
|
||||
|
||||
`$ sudo apt-get update
|
||||
$ sudo apt-get upgrade
|
||||
`
|
||||
```
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get upgrade
|
||||
```
|
||||
|
||||
بعد ذلك ، ستحتاج إلى إضافة الحزمة التالية إلى نظامك
|
||||
|
||||
`$ sudo apt-get install software-properties-common
|
||||
`
|
||||
```
|
||||
$ sudo apt-get install software-properties-common
|
||||
```
|
||||
|
||||
أضف ppa: ansible / ansible إلى النظام الخاص بك
|
||||
|
||||
`$ sudo apt-add-repository ppa:ansible/ansible
|
||||
`
|
||||
```
|
||||
$ sudo apt-add-repository ppa:ansible/ansible
|
||||
```
|
||||
|
||||
قم بتحديث repos الخاص بك مرة أخرى
|
||||
|
||||
`$ sudo apt-get update
|
||||
`
|
||||
```
|
||||
$ sudo apt-get update
|
||||
```
|
||||
|
||||
عادة ما تكون هناك خطوات قليلة تشارك في نشر التعليمات البرمجية في الإنتاج (إلى الموقع المباشر). يزداد عدد الخطوات كلما أصبح موقعك / تطبيق / Webapp أكبر وأكثر تعقيدًا.
|
||||
|
||||
@ -39,20 +43,22 @@ Ansible هي أداة أتمتة ، يتم استخدامها غالبًا لل
|
||||
|
||||
تستخدم لغة تسمى [YAML](https://en.wikipedia.org/wiki/YAML) والتي تسمح لك بوصف المؤثرات القريبة من الإنجليزية البسيطة ، كما يمكنك أن ترى في مثال الوحدة النمطية Ansible:
|
||||
|
||||
`---
|
||||
- yum: name={{contact.item}} state=installed
|
||||
with_items:
|
||||
- app_server
|
||||
- acme_software
|
||||
|
||||
|
||||
- service: name=app_server state=running enabled=yes
|
||||
`
|
||||
```YAML
|
||||
---
|
||||
- yum: name={{contact.item}} state=installed
|
||||
with_items:
|
||||
- app_server
|
||||
- acme_software
|
||||
|
||||
|
||||
- service: name=app_server state=running enabled=yes
|
||||
```
|
||||
|
||||
أخيرا ، قم بتثبيت الحزمة
|
||||
|
||||
`$ sudo apt-get install ansible
|
||||
`
|
||||
```
|
||||
$ sudo apt-get install ansible
|
||||
```
|
||||
|
||||
من المزايا المهمة لاستخدام Ansible هو أنه يستخدم SSH (Secure SHell) بشكل افتراضي ، ويمكن للوحدات أن تقيم على أي جهاز (كمبيوتر) لا يتطلب خوادم أو شواهد أو قواعد بيانات.
|
||||
|
||||
|
@ -35,13 +35,15 @@ _جميع روابط thoses هي ل Docker CE (إصدار المجتمع)_
|
||||
|
||||
لاختبار ما إذا كان التطبيق سارًا بشكل جيد ، قم بتشغيل:
|
||||
|
||||
`docker --version
|
||||
`
|
||||
```
|
||||
docker --version
|
||||
```
|
||||
|
||||
تأكد من أن لديك مخرجات تبدو كالتالي:
|
||||
|
||||
`Docker version 18.06.1-ce, build e68fc7a
|
||||
`
|
||||
```
|
||||
Docker version 18.06.1-ce, build e68fc7a
|
||||
```
|
||||
|
||||
* * *
|
||||
|
||||
@ -49,18 +51,19 @@ _جميع روابط thoses هي ل Docker CE (إصدار المجتمع)_
|
||||
|
||||
اختبار أن التثبيت الخاص بك يعمل عن طريق تشغيل صورة Docker بسيطة ، مرحبا العالم:
|
||||
|
||||
`docker run hello-world
|
||||
|
||||
Unable to find image 'hello-world:latest' locally
|
||||
latest: Pulling from library/hello-world
|
||||
ca4f61b1923c: Pull complete
|
||||
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
|
||||
Status: Downloaded newer image for hello-world:latest
|
||||
|
||||
Hello from Docker!
|
||||
This message shows that your installation appears to be working correctly.
|
||||
...
|
||||
`
|
||||
```
|
||||
docker run hello-world
|
||||
|
||||
Unable to find image 'hello-world:latest' locally
|
||||
latest: Pulling from library/hello-world
|
||||
ca4f61b1923c: Pull complete
|
||||
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
|
||||
Status: Downloaded newer image for hello-world:latest
|
||||
|
||||
Hello from Docker!
|
||||
This message shows that your installation appears to be working correctly.
|
||||
...
|
||||
```
|
||||
|
||||
### ما هي الحاويات ثم:
|
||||
|
||||
@ -95,91 +98,92 @@ _جميع روابط thoses هي ل Docker CE (إصدار المجتمع)_
|
||||
|
||||
Dockerfile هو المكان الذي تكتب فيه التعليمات لبناء صورة Docker. يمكن أن تكون هذه التعليمات: **RUN apt-get y install some-package** : to install a software package **EXPOSE 8000** : لعرض منفذ **ENV ANT\_HOME / usr / local / apache-ant** لتمرير متغير بيئة وما إلى ذلك. بمجرد الانتهاء من إعداد Dockerfile ، يمكنك استخدام الأمر لبناء المرسى لبناء صورة منه. إليك مثال على Dockerfile:
|
||||
|
||||
`# Start with ubuntu 14.04
|
||||
FROM ubuntu:14.04
|
||||
|
||||
MAINTAINER freeCodeCamp@gmail.com
|
||||
|
||||
# For SSH access and port redirection
|
||||
ENV ROOTPASSWORD sample
|
||||
|
||||
# Turn off prompts during installations
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
RUN echo "debconf shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
|
||||
RUN echo "debconf shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections
|
||||
|
||||
# Update packages
|
||||
RUN apt-get -y update
|
||||
|
||||
# Install system tools / libraries
|
||||
RUN apt-get -y install python3-software-properties \
|
||||
software-properties-common \
|
||||
bzip2 \
|
||||
ssh \
|
||||
net-tools \
|
||||
vim \
|
||||
curl \
|
||||
expect \
|
||||
git \
|
||||
nano \
|
||||
wget \
|
||||
build-essential \
|
||||
dialog \
|
||||
make \
|
||||
build-essential \
|
||||
checkinstall \
|
||||
bridge-utils \
|
||||
virt-viewer \
|
||||
python-pip \
|
||||
python-setuptools \
|
||||
python-dev
|
||||
|
||||
# Install Node, npm
|
||||
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
|
||||
RUN apt-get install -y nodejs
|
||||
|
||||
# Add oracle-jdk7 to repositories
|
||||
RUN add-apt-repository ppa:webupd8team/java
|
||||
|
||||
# Make sure the package repository is up to date
|
||||
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
|
||||
|
||||
# Update apt
|
||||
RUN apt-get -y update
|
||||
|
||||
# Install oracle-jdk7
|
||||
RUN apt-get -y install oracle-java7-installer
|
||||
|
||||
# Export JAVA_HOME variable
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
|
||||
|
||||
# Run sshd
|
||||
RUN apt-get install -y openssh-server
|
||||
RUN mkdir /var/run/sshd
|
||||
RUN echo "root:$ROOTPASSWORD" | chpasswd
|
||||
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
|
||||
|
||||
# SSH login fix. Otherwise user is kicked off after login
|
||||
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
|
||||
|
||||
# Expose Node.js app port
|
||||
EXPOSE 8000
|
||||
|
||||
# Create tap-to-android app directory
|
||||
RUN mkdir -p /usr/src/my-app
|
||||
WORKDIR /usr/src/my-app
|
||||
|
||||
# Install app dependencies
|
||||
COPY . /usr/src/my-app
|
||||
RUN npm install
|
||||
|
||||
# Add entrypoint
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
CMD ["npm", "start"]
|
||||
`
|
||||
```
|
||||
# Start with ubuntu 14.04
|
||||
FROM ubuntu:14.04
|
||||
|
||||
MAINTAINER freeCodeCamp@gmail.com
|
||||
|
||||
# For SSH access and port redirection
|
||||
ENV ROOTPASSWORD sample
|
||||
|
||||
# Turn off prompts during installations
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
RUN echo "debconf shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
|
||||
RUN echo "debconf shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections
|
||||
|
||||
# Update packages
|
||||
RUN apt-get -y update
|
||||
|
||||
# Install system tools / libraries
|
||||
RUN apt-get -y install python3-software-properties \
|
||||
software-properties-common \
|
||||
bzip2 \
|
||||
ssh \
|
||||
net-tools \
|
||||
vim \
|
||||
curl \
|
||||
expect \
|
||||
git \
|
||||
nano \
|
||||
wget \
|
||||
build-essential \
|
||||
dialog \
|
||||
make \
|
||||
build-essential \
|
||||
checkinstall \
|
||||
bridge-utils \
|
||||
virt-viewer \
|
||||
python-pip \
|
||||
python-setuptools \
|
||||
python-dev
|
||||
|
||||
# Install Node, npm
|
||||
RUN curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
|
||||
RUN apt-get install -y nodejs
|
||||
|
||||
# Add oracle-jdk7 to repositories
|
||||
RUN add-apt-repository ppa:webupd8team/java
|
||||
|
||||
# Make sure the package repository is up to date
|
||||
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
|
||||
|
||||
# Update apt
|
||||
RUN apt-get -y update
|
||||
|
||||
# Install oracle-jdk7
|
||||
RUN apt-get -y install oracle-java7-installer
|
||||
|
||||
# Export JAVA_HOME variable
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle
|
||||
|
||||
# Run sshd
|
||||
RUN apt-get install -y openssh-server
|
||||
RUN mkdir /var/run/sshd
|
||||
RUN echo "root:$ROOTPASSWORD" | chpasswd
|
||||
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
|
||||
|
||||
# SSH login fix. Otherwise user is kicked off after login
|
||||
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
|
||||
|
||||
# Expose Node.js app port
|
||||
EXPOSE 8000
|
||||
|
||||
# Create tap-to-android app directory
|
||||
RUN mkdir -p /usr/src/my-app
|
||||
WORKDIR /usr/src/my-app
|
||||
|
||||
# Install app dependencies
|
||||
COPY . /usr/src/my-app
|
||||
RUN npm install
|
||||
|
||||
# Add entrypoint
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
CMD ["npm", "start"]
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -8,36 +8,43 @@ Docker-Compose هو أداة لتحديد وتشغيل تطبيقات Docker م
|
||||
|
||||
الخطوات اللازمة لاستخدام عامل الميناء-إنشاء
|
||||
|
||||
`1)create a Dockerfile which defines the image and can be produsable every where.
|
||||
`
|
||||
```
|
||||
1)create a Dockerfile which defines the image and can be produsable every where.
|
||||
```
|
||||
|
||||
`2)create a docke-compose yml file to run the services
|
||||
`
|
||||
```
|
||||
2)create a docke-compose yml file to run the services
|
||||
```
|
||||
|
||||
`3)use docker-compose up to start the sevices specified in docker-compose.yml file
|
||||
`
|
||||
```
|
||||
3)use docker-compose up to start the sevices specified in docker-compose.yml file
|
||||
```
|
||||
|
||||
#### الأوامر الأساسية في buser-compose
|
||||
|
||||
* الأمر لتشغيل حاويات عامل ميناء
|
||||
|
||||
`docker-compose -f docker-compose.yml up
|
||||
`
|
||||
```
|
||||
docker-compose -f docker-compose.yml up
|
||||
```
|
||||
|
||||
* أمر لتشغيل الحاويات في وضع فصل
|
||||
|
||||
`docker-compose -f docker-compose.yml up -d
|
||||
`
|
||||
```
|
||||
docker-compose -f docker-compose.yml up -d
|
||||
```
|
||||
|
||||
* الأمر لتشغيل الحاويات بعد بناء الصور مرة أخرى (ملاحظة: المرة الأولى التي نستخدم فيها بناء حاويات حاويات السفن سوف يحدث تلقائيًا)
|
||||
|
||||
`docker-compose -f docker-compose.yml --build -d
|
||||
`
|
||||
```
|
||||
docker-compose -f docker-compose.yml --build -d
|
||||
```
|
||||
|
||||
* أمر لإيقاف الحاويات عندما نركض في وضع فصل
|
||||
|
||||
`docker-compose -f docker-compose.yml down
|
||||
`
|
||||
```
|
||||
docker-compose -f docker-compose.yml down
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -6,8 +6,9 @@ localeTitle: دوكر وضع منفصلة
|
||||
|
||||
يعني الوضع المنفصل ، الموضح في الخيار `--detach` أو `-d` ، أن حاوية Docker تعمل في خلفية الجهاز الخاص بك. لا يتلقى مدخلات أو عرض الإخراج.
|
||||
|
||||
`docker run -d IMAGE
|
||||
`
|
||||
```
|
||||
docker run -d IMAGE
|
||||
```
|
||||
|
||||
إذا قمت بتشغيل حاويات في الخلفية ، يمكنك معرفة التفاصيل الخاصة بها باستخدام `docker ps` توصيل `docker ps` ، ثم إعادة توصيل الجهاز بمدخلات ومخرجاته.
|
||||
|
||||
|
@ -25,9 +25,10 @@ Docker عبارة عن منصة مفتوحة لإنشاء التطبيقات ا
|
||||
* لينكس:
|
||||
|
||||
|
||||
`curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sh get-docker.sh
|
||||
`
|
||||
```
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sh get-docker.sh
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,40 +10,42 @@ localeTitle: صورة بناء منفصلة
|
||||
|
||||
في هذا المثال ، سنستخدم خادمًا بسيطًا لخادم الويب في [Go](https://golang.org/) . التعليمة البرمجية التالية هي مجرد webserver hello world يستمع على المنفذ `8080` .
|
||||
|
||||
`package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprint(w, "Hello world!")
|
||||
}
|
||||
|
||||
func main() {
|
||||
http.HandleFunc("/", handler)
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
}
|
||||
`
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprint(w, "Hello world!")
|
||||
}
|
||||
|
||||
func main() {
|
||||
http.HandleFunc("/", handler)
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
}
|
||||
```
|
||||
|
||||
### Dockerfile
|
||||
|
||||
قد يبدو Dockerfile لهذا الرمز شيء من هذا القبيل
|
||||
|
||||
`FROM golang:1.11
|
||||
|
||||
ADD . /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN go build -o /myserver .
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD [ "/myserver" ]
|
||||
`
|
||||
```
|
||||
FROM golang:1.11
|
||||
|
||||
ADD . /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN go build -o /myserver .
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD [ "/myserver" ]
|
||||
```
|
||||
|
||||
بناء هذه الصورة ينتج في صورة بحجم 783MB !! باستخدام صورة بهذا الحجم للتطبيق البسيط ، من السهل رؤية كيف يمكن أن يؤدي ذلك إلى إبطاء الأشياء عند النشر.
|
||||
|
||||
@ -55,23 +57,24 @@ localeTitle: صورة بناء منفصلة
|
||||
|
||||
سيقوم Dockerfile التالي ببناء الثنائي داخل صورة golang ومن ثم بناء صورة جديدة من الصفر ، نسخ الملف الثنائي من الصورة الأولى إلى الثانية.
|
||||
|
||||
`FROM golang:1.11 as build
|
||||
|
||||
ADD . /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN go build -o /myserver .
|
||||
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=build /myserver /myserver
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD [ "myserver" ]
|
||||
`
|
||||
```
|
||||
FROM golang:1.11 as build
|
||||
|
||||
ADD . /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN go build -o /myserver .
|
||||
|
||||
|
||||
FROM scratch
|
||||
|
||||
COPY --from=build /myserver /myserver
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD [ "myserver" ]
|
||||
```
|
||||
|
||||
بناء من هذا dockerfile النتائج في حجم الصورة النهائية من 6.55MB فقط! هذا **أصغر** من **100 مرة** من محاولتنا الأولى ، مما يجعله أسرع 100 مرة في سحب الصورة من التسجيل!
|
||||
|
||||
|
@ -10,53 +10,59 @@ localeTitle: أنواع البيانات
|
||||
|
||||
العدد الصحيح هو رقم غير عشري. وقد بنى Elixir دعمًا للأرقام الثنائية ، والثمانية ، والسداسي عشرية كأعداد صحيحة.
|
||||
|
||||
`iex> 1337
|
||||
1337
|
||||
`
|
||||
```elixir
|
||||
iex> 1337
|
||||
1337
|
||||
```
|
||||
|
||||
### العربات
|
||||
|
||||
يتطلب العوم عشريًا ورقمًا واحدًا على الأقل بعد العلامة العشرية. يدعم Floats دقة مزدوجة 64 بت و `e` أجل exponets.
|
||||
|
||||
`iex> 27e-100
|
||||
27e-100
|
||||
`
|
||||
```elixir
|
||||
iex> 27e-100
|
||||
27e-100
|
||||
```
|
||||
|
||||
### القيم المنطقية
|
||||
|
||||
البولية هي قيمة حقيقية أو خاطئة. في الإكسير كل شيء صدق ما عدا `false` ولا `nil` . من المهم ملاحظة أن booleans هي نوع فرعي من ذرات Elxir (يمكنك فحص القيم في IEX لترى بنفسك).
|
||||
|
||||
`iex> true
|
||||
true
|
||||
iex> false
|
||||
false
|
||||
iex> nil
|
||||
nil
|
||||
`
|
||||
```elixir
|
||||
iex> true
|
||||
true
|
||||
iex> false
|
||||
false
|
||||
iex> nil
|
||||
nil
|
||||
```
|
||||
|
||||
### ذرات
|
||||
|
||||
تعتبر الذرة قيمة ثابتة هي نفس الاسم. يتم استخدام الذرات بشكل شائع لرسائل الحالة / الأخطاء داخل المجموعة مع المزيد من المعلومات المضمنة في سلسلة.
|
||||
|
||||
`iex> {:ok, "Message sent successfully"}
|
||||
{:ok, "Message sent successfully"}
|
||||
iex> {:error, "Message failed to send"}
|
||||
{:error, "Message failed to send"}
|
||||
`
|
||||
```elixir
|
||||
iex> {:ok, "Message sent successfully"}
|
||||
{:ok, "Message sent successfully"}
|
||||
iex> {:error, "Message failed to send"}
|
||||
{:error, "Message failed to send"}
|
||||
```
|
||||
|
||||
### سلاسل
|
||||
|
||||
السلسلة UTF-8 مشفرة وملفوفة في علامات اقتباس مزدوجة.
|
||||
|
||||
`iex> "freeCodeCamp"
|
||||
"freeCodeCamp"
|
||||
`
|
||||
```elixir
|
||||
iex> "freeCodeCamp"
|
||||
"freeCodeCamp"
|
||||
```
|
||||
|
||||
السلسلة هي أيضًا ثنائية ، يمكنك رؤية تمثيل ثنائي لسلسلة في Elixir عن طريق إرفاق `<> <<0>>` بنهاية السلسلة. يمكن أن تمثل السلسلة ثنائيًا ، ويمكن أن يمثل الثنائي أيضًا سلسلة.
|
||||
|
||||
`iex> "freeCodeCamp" <> <<0>>
|
||||
<<102, 114, 101, 101, 67, 111, 100, 101, 67, 97, 109, 112, 0>>
|
||||
`
|
||||
```elixir
|
||||
iex> "freeCodeCamp" <> <<0>>
|
||||
<<102, 114, 101, 101, 67, 111, 100, 101, 67, 97, 109, 112, 0>>
|
||||
```
|
||||
|
||||
#### معلومات اكثر
|
||||
|
||||
|
@ -10,23 +10,25 @@ localeTitle: كابل بيانات
|
||||
|
||||
يستخدم المستند المضمن `#` أمام نص يصف شيئًا عن الشفرة.
|
||||
|
||||
`def get(path) do
|
||||
# This is an inline comment for documentation purposes.
|
||||
"http get request response"
|
||||
end
|
||||
`
|
||||
```elixir
|
||||
def get(path) do
|
||||
# This is an inline comment for documentation purposes.
|
||||
"http get request response"
|
||||
end
|
||||
```
|
||||
|
||||
### وثائق الوحدة
|
||||
|
||||
يصف مستند الوحدة النمطية الغرض من وحدة نمطية. تشبه Moduledocs التعليقات متعددة الأسطر التي قد تجدها في لغات البرمجة الأخرى.
|
||||
|
||||
`defmodule WebServer do
|
||||
@moduledoc """
|
||||
Provides a set of functions to accept and respond to HTTP requests.
|
||||
This module provides the @get/1, @post/1, and @put/1 functions.
|
||||
"""
|
||||
end
|
||||
`
|
||||
```elixir
|
||||
defmodule WebServer do
|
||||
@moduledoc """
|
||||
Provides a set of functions to accept and respond to HTTP requests.
|
||||
This module provides the @get/1, @post/1, and @put/1 functions.
|
||||
"""
|
||||
end
|
||||
```
|
||||
|
||||
### وثائق الوظيفة
|
||||
|
||||
|
@ -10,9 +10,10 @@ localeTitle: enumerable
|
||||
|
||||
باستخدام `Enum.map` يمكنك تشغيل وظيفة مجهولة (وظيفة ليست داخل وحدة نمطية) تمر فوق كل عنصر في قائمة. هذا ينجز نفس المهمة مثل حلقة tradational دون الحاجة إلى تحوير متغير تراكم.
|
||||
|
||||
`iex> Enum.map([1, 2, 3], fn(x) -> x * 2 end)
|
||||
[2, 4, 6]
|
||||
`
|
||||
```elixir
|
||||
iex> Enum.map([1, 2, 3], fn(x) -> x * 2 end)
|
||||
[2, 4, 6]
|
||||
```
|
||||
|
||||
## طرق في وحدة التعداد
|
||||
|
||||
@ -22,9 +23,10 @@ localeTitle: enumerable
|
||||
|
||||
يتم تشغيل `Enum.map` وظيفة مجهول أو تم التقاطها عبر قائمة.
|
||||
|
||||
`iex> Enum.map([5, 10, 15, 20], fn(x) -> x * 2 end)
|
||||
[10, 20, 30, 40]
|
||||
`
|
||||
```elixir
|
||||
iex> Enum.map([5, 10, 15, 20], fn(x) -> x * 2 end)
|
||||
[10, 20, 30, 40]
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -12,17 +12,18 @@ localeTitle: Erlang Term Storage
|
||||
|
||||
### ETS Demo في IEX
|
||||
|
||||
`iex(1)> myETSTable = :ets.new(:my_ets_table, [])
|
||||
#Reference<0.1520230345.550371329.65846>
|
||||
iex(2)> :ets.insert(myETSTable, {"favoriteWebSite", "freeCodeCamp"})
|
||||
true
|
||||
iex(3)> :ets.insert(myETSTable, {"favoriteProgrammingLanguage", "Elixir"})
|
||||
true
|
||||
iex(4)> :ets.i(myETSTable)
|
||||
<1 > {<<"favoriteProgrammingLanguage">>,<<"Elixir">>}
|
||||
<2 > {<<"favoriteWebSite">>,<<"freeCodeCamp">>}
|
||||
EOT (q)uit (p)Digits (k)ill /Regexp -->
|
||||
`
|
||||
```elixir
|
||||
iex(1)> myETSTable = :ets.new(:my_ets_table, [])
|
||||
#Reference<0.1520230345.550371329.65846>
|
||||
iex(2)> :ets.insert(myETSTable, {"favoriteWebSite", "freeCodeCamp"})
|
||||
true
|
||||
iex(3)> :ets.insert(myETSTable, {"favoriteProgrammingLanguage", "Elixir"})
|
||||
true
|
||||
iex(4)> :ets.i(myETSTable)
|
||||
<1 > {<<"favoriteProgrammingLanguage">>,<<"Elixir">>}
|
||||
<2 > {<<"favoriteWebSite">>,<<"freeCodeCamp">>}
|
||||
EOT (q)uit (p)Digits (k)ill /Regexp -->
|
||||
```
|
||||
|
||||
## إصرار
|
||||
|
||||
|
@ -6,32 +6,35 @@ localeTitle: قوائم
|
||||
|
||||
في الإكسير ، القوائم هي هياكل بيانات تتألف من قيم داخل أقواس مربعة. يمكن أن تكون القيم في القائمة أي نوع.
|
||||
|
||||
`iex> [1, "string", true]
|
||||
[1, "string", true]
|
||||
`
|
||||
```elixir
|
||||
iex> [1, "string", true]
|
||||
[1, "string", true]
|
||||
```
|
||||
|
||||
## ثبات
|
||||
|
||||
هياكل البيانات في Elixir غير قابلة للتغيير ، لذا فإن أي عمليات يتم تنفيذها في قائمة ستعيد قائمة جديدة ، تاركة الأصلي سليمة.
|
||||
|
||||
`iex> list = [1, "string", true]
|
||||
[1, "string", true]
|
||||
iex> list ++ [2]
|
||||
[1, "string", true, 2]
|
||||
iex> list
|
||||
[1, "string", true]
|
||||
`
|
||||
```elixir
|
||||
iex> list = [1, "string", true]
|
||||
[1, "string", true]
|
||||
iex> list ++ [2]
|
||||
[1, "string", true, 2]
|
||||
iex> list
|
||||
[1, "string", true]
|
||||
```
|
||||
|
||||
## رؤساء والذيول
|
||||
|
||||
يمكن الوصول بسهولة إلى الرأس (العنصر الأول) من القائمة والذيل (القيم المتبقية) مع مشغلي `hd/1` و `tl/1` .
|
||||
|
||||
`iex> list = [1, "string", true]
|
||||
iex> hd(list)
|
||||
1
|
||||
iex> tl(list)
|
||||
["string", true]
|
||||
`
|
||||
```elixir
|
||||
iex> list = [1, "string", true]
|
||||
iex> hd(list)
|
||||
1
|
||||
iex> tl(list)
|
||||
["string", true]
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,37 +10,43 @@ localeTitle: عنقاء
|
||||
|
||||
تركيب فينيكس بسيط نسبيًا ، ولكن قبل أن نتمكن من ذلك ، سنحتاج إلى التأكد من أن Elixir ومدير حزمة Hex و Erlang يعملان بالفعل على نظامنا. يحتوي موقع Elixir على [دليل تركيب](https://elixir-lang.org/install.html) رائع لكل من Elixir و Erlang. بمجرد إعداد هذه البرامج بنجاح ، قم ببساطة بتشغيل:
|
||||
|
||||
`$ mix local.hex
|
||||
`
|
||||
```shell
|
||||
$ mix local.hex
|
||||
```
|
||||
|
||||
لتثبيت مدير حزمة Hex ، ثم قم بتثبيت تشغيل أرشيف Phoenix:
|
||||
|
||||
`$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
|
||||
`
|
||||
```shell
|
||||
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
|
||||
```
|
||||
|
||||
## إنشاء تطبيق Phoenix:
|
||||
|
||||
1. بعد تثبيت تطبيق Phoenix ، يكون إنشاء تطبيق أمرًا بسيطًا:
|
||||
|
||||
`$ mix phx.new <application_name>
|
||||
`
|
||||
```shell
|
||||
$ mix phx.new <application_name>
|
||||
```
|
||||
|
||||
2. تشغيل هذا الأمر مع إنشاء بنية دليل وجميع الملفات الأساسية المطلوبة مع اسم _التطبيق_ الذي استخدمته في الأمر السابق. ستتم مطالبتك بعد ذلك بتثبيت اعتماديات أساسية للتطبيق ، لذلك سنقول نعم لذلك.
|
||||
|
||||
3. بعد ذلك ، سيُطلب منك التغيير إلى دليل مشروعنا:
|
||||
|
||||
|
||||
`$ cd <application_name>
|
||||
`
|
||||
```shell
|
||||
$ cd <application_name>
|
||||
```
|
||||
|
||||
4. افتراضياً ، يفترض Phoenix أننا سنستخدم PostgreSQL لتطبيقنا مع اسم مستخدم وكلمة مرور لـ 'postgres'. إذا لم يكن الأمر كذلك ، فستحتاج إلى تغيير التكوين - وإلا فكل ما نحتاج إليه هو إنشاء قاعدة البيانات الخاصة بنا:
|
||||
|
||||
`$ mix ecto.create
|
||||
`
|
||||
```shell
|
||||
$ mix ecto.create
|
||||
```
|
||||
|
||||
5. أخيرًا ، سنبدأ خادمنا:
|
||||
|
||||
`$ mix phx.server
|
||||
`
|
||||
```shell
|
||||
$ mix phx.server
|
||||
```
|
||||
|
||||
6. الآن ، قف في متصفحك وانتقل إلى localhost: 4000 وشاهد صفحة الترحيب! تهانينا ، لقد حصلت على تطبيق Phoenix للعمل.
|
@ -6,27 +6,30 @@ localeTitle: سلاسل
|
||||
|
||||
يتم التفاف سلاسل في الإكسير مع علامات اقتباس مزدوجة ، في حين يتم سرد القوائم الفردية. هم الثنائيات المشفرة UTF-8.
|
||||
|
||||
`iex> "Hello world!"
|
||||
"Hello world!"
|
||||
`
|
||||
```elixir
|
||||
iex> "Hello world!"
|
||||
"Hello world!"
|
||||
```
|
||||
|
||||
سلسلة الاستيفاء ممكن في الإكسير مع octothorp تليها الأقواس المجعد.
|
||||
|
||||
`iex> variable = "world!"
|
||||
"world!"
|
||||
iex> "Hello #{variable}"
|
||||
"Hello world!"
|
||||
`
|
||||
```elixir
|
||||
iex> variable = "world!"
|
||||
"world!"
|
||||
iex> "Hello #{variable}"
|
||||
"Hello world!"
|
||||
```
|
||||
|
||||
تحتوي الوحدة النمطية السلسلة على العديد من الوظائف المضمنة المفيدة استنادًا إلى معيار Unicode.
|
||||
|
||||
`iex> example = "string"
|
||||
"string"
|
||||
iex> String.capitalize(example)
|
||||
"String"
|
||||
iex> String.duplicate(example, 2)
|
||||
"stringstring"
|
||||
`
|
||||
```elixir
|
||||
iex> example = "string"
|
||||
"string"
|
||||
iex> String.capitalize(example)
|
||||
"String"
|
||||
iex> String.duplicate(example, 2)
|
||||
"stringstring"
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -6,23 +6,25 @@ localeTitle: الصفوف
|
||||
|
||||
في الإكسير ، الصفوف هي بنية بيانات يمكنها الاحتفاظ بأي قيمة أو خليط من الأنواع. يتم تعريف المجموعات بواسطة الأقواس المتعرجة ، وتبدأ الفهارس الخاصة بها من 0. ولما كانت الصفوف يتم تخزينها بشكل متقارب في الذاكرة ، فإن الحصول على البيانات منها هو عملية سريعة جدًا.
|
||||
|
||||
`iex> tuple = {:atom, "string"}
|
||||
{:atom, "string"}
|
||||
iex> elem(tuple, 0)
|
||||
:atom
|
||||
`
|
||||
```elixir
|
||||
iex> tuple = {:atom, "string"}
|
||||
{:atom, "string"}
|
||||
iex> elem(tuple, 0)
|
||||
:atom
|
||||
```
|
||||
|
||||
## ثبات
|
||||
|
||||
تعتبر الصفوف في Elixir غير قابلة للتغيير ، لذا فإن إجراء تعديلات سيؤدي إلى ظهور مجموعة جديدة تمامًا - مما يوفر النص الأصلي في الذاكرة.
|
||||
|
||||
`iex> tuple = {:atom, "string"}
|
||||
{:atom, "string"}
|
||||
iex> put_elem(tuple, 1, true)
|
||||
{:atom, true}
|
||||
iex> tuple
|
||||
{:atom, "string"}
|
||||
`
|
||||
```elixir
|
||||
iex> tuple = {:atom, "string"}
|
||||
{:atom, "string"}
|
||||
iex> put_elem(tuple, 1, true)
|
||||
{:atom, true}
|
||||
iex> tuple
|
||||
{:atom, "string"}
|
||||
```
|
||||
|
||||
## نمط مطابقة
|
||||
|
||||
|
@ -16,50 +16,54 @@ Erlang يجعل الاستخدام المكثف من **العودية** . منذ
|
||||
|
||||
في ما يلي مثال على العودية ، حيث يوضح كيف تقوم إحدى الدرجات مرارًا بتفكيك الحرف الأول من مقدمة الاسم وطباعته ، ولا تتوقف إلا عند مواجهة الحرف الأخير.
|
||||
|
||||
`-module(name).
|
||||
|
||||
-export([print_name/1]).
|
||||
|
||||
print_name([RemainingLetter | []]) ->
|
||||
io:format("~c~n", [RemainingLetter]);
|
||||
print_name([FirstLetter | RestOfName]) ->
|
||||
io:format("~c~n", [FirstLetter]),
|
||||
print_name(RestOfName).
|
||||
`
|
||||
```erlang
|
||||
-module(name).
|
||||
|
||||
-export([print_name/1]).
|
||||
|
||||
print_name([RemainingLetter | []]) ->
|
||||
io:format("~c~n", [RemainingLetter]);
|
||||
print_name([FirstLetter | RestOfName]) ->
|
||||
io:format("~c~n", [FirstLetter]),
|
||||
print_name(RestOfName).
|
||||
```
|
||||
|
||||
انتاج:
|
||||
|
||||
`> name:print_name("Mike").
|
||||
M
|
||||
i
|
||||
k
|
||||
e
|
||||
ok
|
||||
`
|
||||
```
|
||||
> name:print_name("Mike").
|
||||
M
|
||||
i
|
||||
k
|
||||
e
|
||||
ok
|
||||
```
|
||||
|
||||
وهناك أيضا تركيز كبير على **نمط مطابقة،** التي كثيرا ما يلغي الحاجة ل `if` بنية أو `case` البيان. في المثال التالي ، هناك نوعان من التطابقات لأسماء محددة ، متبوعًا بـ catch-all لأية أسماء أخرى.
|
||||
|
||||
`-module(greeting).
|
||||
|
||||
-export([say_hello/1]).
|
||||
|
||||
say_hello("Mary") ->
|
||||
"Welcome back Mary!";
|
||||
say_hello("Tom") ->
|
||||
"Howdy Tom.";
|
||||
say_hello(Name) ->
|
||||
"Hello " ++ Name ++ ".".
|
||||
`
|
||||
```erlang
|
||||
-module(greeting).
|
||||
|
||||
-export([say_hello/1]).
|
||||
|
||||
say_hello("Mary") ->
|
||||
"Welcome back Mary!";
|
||||
say_hello("Tom") ->
|
||||
"Howdy Tom.";
|
||||
say_hello(Name) ->
|
||||
"Hello " ++ Name ++ ".".
|
||||
```
|
||||
|
||||
انتاج:
|
||||
|
||||
`> greeting:say_hello("Mary").
|
||||
"Welcome back Mary!"
|
||||
> greeting:say_hello("Tom").
|
||||
"Howdy Tom."
|
||||
> greeting:say_hello("Beth").
|
||||
"Hello Beth."
|
||||
`
|
||||
```
|
||||
> greeting:say_hello("Mary").
|
||||
"Welcome back Mary!"
|
||||
> greeting:say_hello("Tom").
|
||||
"Howdy Tom."
|
||||
> greeting:say_hello("Beth").
|
||||
"Hello Beth."
|
||||
```
|
||||
|
||||
### حاول
|
||||
|
||||
|
@ -6,25 +6,29 @@ localeTitle: كيفية المصادقة باستخدام GitHub باستخدا
|
||||
|
||||
تحقق من عدم وجود ملفات `rsa` هنا قبل المتابعة ، استخدم:
|
||||
|
||||
`ls -al ~/.ssh
|
||||
`
|
||||
```shell
|
||||
ls -al ~/.ssh
|
||||
```
|
||||
|
||||
إذا لم يكن هناك ما يتم سرده (على سبيل المثال `: No such file or directory` ) ، فاستخدم:
|
||||
|
||||
`mkdir $HOME/.ssh
|
||||
`
|
||||
```shell
|
||||
mkdir $HOME/.ssh
|
||||
```
|
||||
|
||||
إذا لم يكن هناك شيء هناك ، قم بإنشاء keygen جديد مع:
|
||||
|
||||
`ssh-keygen -t rsa -b 4096 -C your@email.com
|
||||
`
|
||||
```shell
|
||||
ssh-keygen -t rsa -b 4096 -C your@email.com
|
||||
```
|
||||
|
||||
الآن باستخدام `ls -al ~/.ssh` سوف تظهر لدينا `id_rsa.pub` الملف.
|
||||
|
||||
أضف مفتاح SSH إلى وكيل SSH:
|
||||
|
||||
`eval "$(ssh-agent -s)" # for mac and Linux from bash
|
||||
`
|
||||
```shell
|
||||
eval "$(ssh-agent -s)" # for mac and Linux from bash
|
||||
```
|
||||
|
||||
``eval `ssh-agent -s`
|
||||
ssh-agent -s # for Windows
|
||||
@ -32,20 +36,24 @@ localeTitle: كيفية المصادقة باستخدام GitHub باستخدا
|
||||
|
||||
إضافة مفتاح RSA إلى SHH مع:
|
||||
|
||||
`ssh-add ~/.ssh/id_rsa
|
||||
`
|
||||
```shell
|
||||
ssh-add ~/.ssh/id_rsa
|
||||
```
|
||||
|
||||
انسخ مفتاحك إلى الحافظة
|
||||
|
||||
`clip < ~/.ssh/id_rsa.pub # Windows
|
||||
`
|
||||
```shell
|
||||
clip < ~/.ssh/id_rsa.pub # Windows
|
||||
```
|
||||
|
||||
`cat ~/.ssh/id_rsa.pub # Linux
|
||||
`
|
||||
```shell
|
||||
cat ~/.ssh/id_rsa.pub # Linux
|
||||
```
|
||||
|
||||
انتقل إلى صفحة [إعدادات](https://github.com/settings/keys) GitHub وانقر على زر "New SSH key" في المفتاح الذي تم إنشاؤه.
|
||||
|
||||
ثم توثيق مع:
|
||||
|
||||
`ssh -T git@github.com
|
||||
`
|
||||
```shell
|
||||
ssh -T git@github.com
|
||||
```
|
@ -6,44 +6,50 @@ localeTitle: Git Aliases
|
||||
|
||||
لا يقوم Git باستنتاج الأمر تلقائيًا إذا قمت بكتابته جزئيًا. إذا كنت لا تريد كتابة النص الكامل لكل من أوامر Git ، فيمكنك بسهولة إعداد اسم مستعار لكل أمر باستخدام git config. إليك بعض الأمثلة التي قد ترغب في إعدادها:
|
||||
|
||||
`$ git config --global alias.co checkout
|
||||
$ git config --global alias.br branch
|
||||
$ git config --global alias.ci commit
|
||||
$ git config --global alias.st status
|
||||
`
|
||||
```shell
|
||||
$ git config --global alias.co checkout
|
||||
$ git config --global alias.br branch
|
||||
$ git config --global alias.ci commit
|
||||
$ git config --global alias.st status
|
||||
```
|
||||
|
||||
هذا يعني ، على سبيل المثال ، بدلاً من كتابة ارتكاب بوابة ، تحتاج فقط إلى كتابة git ci. أثناء استخدام Git ، ستستخدم على الأرجح الأوامر الأخرى بشكل متكرر أيضًا ؛ لا تتردد في إنشاء أسماء مستعارة جديدة.
|
||||
|
||||
يمكن أن تكون هذه التقنية مفيدة جدًا في إنشاء الأوامر التي تعتقد أنها يجب أن تكون موجودة. على سبيل المثال ، لتصحيح مشكلة قابلية الاستخدام التي واجهتها مع unstage ملف ، يمكنك إضافة اسم مستعار unstage الخاصة بك إلى Git:
|
||||
|
||||
`$ git config --global alias.unstage 'reset HEAD --'
|
||||
`
|
||||
```shell
|
||||
$ git config --global alias.unstage 'reset HEAD --'
|
||||
```
|
||||
|
||||
هذا يجعل الأمرين التاليين مساويين:
|
||||
|
||||
`$ git unstage fileA
|
||||
$ git reset HEAD fileA
|
||||
`
|
||||
```shell
|
||||
$ git unstage fileA
|
||||
$ git reset HEAD fileA
|
||||
```
|
||||
|
||||
هذا يبدو أكثر وضوحا بعض الشيء. من الشائع أيضًا إضافة أمر آخر ، على النحو التالي:
|
||||
|
||||
`$ git config --global alias.last 'log -1 HEAD'
|
||||
`
|
||||
```shell
|
||||
$ git config --global alias.last 'log -1 HEAD'
|
||||
```
|
||||
|
||||
بهذه الطريقة ، يمكنك أن ترى آخر التزام بسهولة:
|
||||
|
||||
`$ git last
|
||||
commit 66938dae3329c7aebe598c2246a8e6af90d04646
|
||||
Author: Josh Goebel <dreamer3@example.com>
|
||||
Date: Tue Aug 26 19:48:51 2008 +0800
|
||||
|
||||
test for current head
|
||||
|
||||
Signed-off-by: Scott Chacon <schacon@example.com>
|
||||
`
|
||||
```shell
|
||||
$ git last
|
||||
commit 66938dae3329c7aebe598c2246a8e6af90d04646
|
||||
Author: Josh Goebel <dreamer3@example.com>
|
||||
Date: Tue Aug 26 19:48:51 2008 +0800
|
||||
|
||||
`$ git config --global alias.st status --short --branch
|
||||
`
|
||||
test for current head
|
||||
|
||||
Signed-off-by: Scott Chacon <schacon@example.com>
|
||||
```
|
||||
|
||||
```shell
|
||||
$ git config --global alias.st status --short --branch
|
||||
```
|
||||
|
||||
عند تشغيل الأمر `git st` ، سيتم عرض الحالة git بتنسيق مبسط لطيف.
|
||||
|
||||
@ -51,8 +57,9 @@ localeTitle: Git Aliases
|
||||
|
||||
لعرض جميع الأسماء المستعارة التي قمت بإنشائها على جهازك ، قم بتشغيل الأمر:
|
||||
|
||||
`cat ~/.gitconfig
|
||||
`
|
||||
```shell
|
||||
cat ~/.gitconfig
|
||||
```
|
||||
|
||||
سيسمح لك استبدال `cat` باستخدام `nano` بتحريرها أو إزالتها تمامًا.
|
||||
|
||||
|
@ -12,22 +12,25 @@ localeTitle: جيت بيزكت
|
||||
|
||||
لبدء جلسة شرائية ، ستقوم بإخبار بوابة git لبدء جلسة عمل ، وتحديد إصدار "سيئ" ، وتحديد إصدار "جيد". بافتراض أن الالتزام الحالي قد تم كسره ولكن التزام `4b60707` جيد ، فسوف يتم تشغيل ما يلي:
|
||||
|
||||
`git bisect start
|
||||
git bisect bad
|
||||
git bisect good 4b60707
|
||||
`
|
||||
```shell
|
||||
git bisect start
|
||||
git bisect bad
|
||||
git bisect good 4b60707
|
||||
```
|
||||
|
||||
سيقوم Git بالتحقق من التزام بين الإصدارات "الجيدة" و "السيئة" وإخراج شيء مثل ما يلي:
|
||||
|
||||
`Bisecting: 2 revisions left to test after this (roughly 2 steps)
|
||||
`
|
||||
```
|
||||
Bisecting: 2 revisions left to test after this (roughly 2 steps)
|
||||
```
|
||||
|
||||
يجب عليك الآن أن تخبر git إذا كان الالتزام الحالي يعمل مع `git bisect good` أو إذا تم كسر الالتزام الحالي مع `git bisect bad` . ستتكرر هذه العملية حتى يصبح الأمر قادراً على طباعة أول التزام سيء.
|
||||
|
||||
عند الانتهاء ، يجب تنظيف جلسة المشط. سيؤدي ذلك إلى إعادة تعيين HEAD إلى ما كان عليه قبل بدء جلسة العمل:
|
||||
|
||||
`git bisect reset
|
||||
`
|
||||
```shell
|
||||
git bisect reset
|
||||
```
|
||||
|
||||
### موارد آخرى
|
||||
|
||||
|
@ -14,10 +14,11 @@ localeTitle: جيت بليم
|
||||
|
||||
سترى مخرجات مثل هذا:
|
||||
|
||||
`0292b580 (Jane Doe 2018-06-18 00:17:23 -0500 1) 3.times do
|
||||
e483daf0 (John Doe 2018-06-18 23:50:40 -0500 2) print 'Welcome '
|
||||
0292b580 (Jane Doe 2018-06-18 00:17:23 -0500 3) end
|
||||
`
|
||||
```shell
|
||||
0292b580 (Jane Doe 2018-06-18 00:17:23 -0500 1) 3.times do
|
||||
e483daf0 (John Doe 2018-06-18 23:50:40 -0500 2) print 'Welcome '
|
||||
0292b580 (Jane Doe 2018-06-18 00:17:23 -0500 3) end
|
||||
```
|
||||
|
||||
يتم وضع علامة على كل سطر باستخدام SHA ، واسم المؤلف وتاريخ الالتزام الأخير.
|
||||
|
||||
|
@ -21,13 +21,15 @@ localeTitle: بوابة فرع
|
||||
|
||||
لعرض الفروع في مستودع Git ، قم بتشغيل الأمر:
|
||||
|
||||
`git branch
|
||||
`
|
||||
```shell
|
||||
git branch
|
||||
```
|
||||
|
||||
لعرض كل من فروع التتبع عن بعد والفروع المحلية ، قم بتشغيل الأمر:
|
||||
|
||||
`git branch -a
|
||||
`
|
||||
```shell
|
||||
git branch -a
|
||||
```
|
||||
|
||||
سيكون هناك علامة نجمية (\*) بجوار الفرع الذي تعمل عليه حاليًا.
|
||||
|
||||
@ -39,8 +41,9 @@ localeTitle: بوابة فرع
|
||||
|
||||
للتحقق من فرع موجود ، قم بتشغيل الأمر:
|
||||
|
||||
`git checkout BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git checkout BRANCH-NAME
|
||||
```
|
||||
|
||||
بشكل عام ، لن تسمح لك Git بالتسجيل في فرع آخر ما لم يكن دليل عملك نظيفًا ، لأنك ستفقد أي تغييرات في دليل العمل غير ملتزم بها. لديك ثلاثة خيارات للتعامل مع تغييراتك: 1) القمامة لهم (انظر [بوابة الخروج للحصول على التفاصيل](https://guide.freecodecamp.org/git/git-checkout/) ) أو 2) ارتكابها (انظر [Git ارتكاب التفاصيل](https://guide.freecodecamp.org/git/git-commit/) ) أو 3) خبأهم (انظر [خبأ Git لمزيد من التفاصيل](https://guide.freecodecamp.org/git/git-stash/) ).
|
||||
|
||||
@ -48,20 +51,22 @@ localeTitle: بوابة فرع
|
||||
|
||||
لإنشاء فرع جديد ، قم بتشغيل الأمر:
|
||||
|
||||
`git branch NEW-BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git branch NEW-BRANCH-NAME
|
||||
```
|
||||
|
||||
لاحظ أن هذا الأمر يقوم بإنشاء الفرع الجديد فقط. ستحتاج إلى تشغيل `git checkout NEW-BRANCH-NAME` للتبديل إليه.
|
||||
|
||||
هناك اختصار لإنشاء واختبار فرع جديد في وقت واحد. يمكنك تمرير الخيار `-b` (للفرع) مع `git checkout` . الأوامر التالية تفعل الشيء نفسه:
|
||||
|
||||
`# Two-step method
|
||||
git branch NEW-BRANCH-NAME
|
||||
git checkout NEW-BRANCH-NAME
|
||||
|
||||
# Shortcut
|
||||
git checkout -b NEW-BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
# Two-step method
|
||||
git branch NEW-BRANCH-NAME
|
||||
git checkout NEW-BRANCH-NAME
|
||||
|
||||
# Shortcut
|
||||
git checkout -b NEW-BRANCH-NAME
|
||||
```
|
||||
|
||||
عندما تنشئ فرعًا جديدًا ، سيتضمن كل الإلتزامات من الفرع الرئيسي. الفرع الأم هو الفرع الذي تتواجد فيه عندما تقوم بإنشاء الفرع الجديد.
|
||||
|
||||
@ -69,37 +74,41 @@ localeTitle: بوابة فرع
|
||||
|
||||
لإعادة تسمية فرع ، قم بتشغيل الأمر:
|
||||
|
||||
`git branch -m OLD-BRANCH-NAME NEW-BRANCH-NAME
|
||||
|
||||
# Alternative
|
||||
git branch --move OLD-BRANCH-NAME NEW-BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git branch -m OLD-BRANCH-NAME NEW-BRANCH-NAME
|
||||
|
||||
# Alternative
|
||||
git branch --move OLD-BRANCH-NAME NEW-BRANCH-NAME
|
||||
```
|
||||
|
||||
### حذف فرع
|
||||
|
||||
لن تسمح لك Git بحذف فرع أنت موجود حاليًا. يجب عليك أولاً الخروج من فرع مختلف ، ثم تشغيل الأمر:
|
||||
|
||||
`git branch -d BRANCH-TO-DELETE
|
||||
|
||||
# Alternative:
|
||||
git branch --delete BRANCH-TO-DELETE
|
||||
`
|
||||
```shell
|
||||
git branch -d BRANCH-TO-DELETE
|
||||
|
||||
# Alternative:
|
||||
git branch --delete BRANCH-TO-DELETE
|
||||
```
|
||||
|
||||
الفرع الذي تقوم بالتبديل إلى إحداث فرق. سيطرح Git خطأً إذا لم يتم دمج التغييرات في الفرع الذي تحاول حذفه بالكامل في الفرع الحالي. يمكنك تجاوز هذا والقوة بوابة لحذف فرع مع `-D` الخيار (لاحظ حرف) أو باستخدام `--force` الخيار مع `-d` أو `--delete` :
|
||||
|
||||
`git branch -D BRANCH-TO-DELETE
|
||||
|
||||
# Alternatives
|
||||
git branch -d --force BRANCH-TO-DELETE
|
||||
git branch --delete --force BRANCH-TO-DELETE
|
||||
`
|
||||
```shell
|
||||
git branch -D BRANCH-TO-DELETE
|
||||
|
||||
# Alternatives
|
||||
git branch -d --force BRANCH-TO-DELETE
|
||||
git branch --delete --force BRANCH-TO-DELETE
|
||||
```
|
||||
|
||||
### قارن الفروع
|
||||
|
||||
يمكنك مقارنة الفروع باستخدام الأمر `git diff` :
|
||||
|
||||
`git diff FIRST-BRANCH..SECOND-BRANCH
|
||||
`
|
||||
```shell
|
||||
git diff FIRST-BRANCH..SECOND-BRANCH
|
||||
```
|
||||
|
||||
سترى الإخراج الملون للتغييرات بين الفروع. بالنسبة إلى جميع الأسطر التي تغيرت ، سيكون إصدار `SECOND-BRANCH` خطًا أخضر يبدأ بـ "+" ، وسيكون إصدار `FIRST-BRANCH` خطًا أحمر يبدأ بـ "-". إذا كنت لا ترغب في أن يقوم Git بعرض سطرين لكل تغيير ، فيمكنك استخدام الخيار `--color-words` . بدلاً من ذلك ، سيعرض Git سطرًا واحدًا مع النص المحذوف باللون الأحمر ، وإضافة النص باللون الأخضر.
|
||||
|
||||
@ -109,10 +118,11 @@ localeTitle: بوابة فرع
|
||||
|
||||
إذا كنت قد نسيت كيفية استخدام أحد الخيارات أو تريد استكشاف وظائف أخرى حول الأمر `git branch` ، فيمكنك تشغيل أي من هذه الأوامر:
|
||||
|
||||
`git help branch
|
||||
git branch --help
|
||||
man git-branch
|
||||
`
|
||||
```shell
|
||||
git help branch
|
||||
git branch --help
|
||||
man git-branch
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -10,20 +10,23 @@ localeTitle: بوابة الخروج
|
||||
|
||||
للخروج من التزام معين ، قم بتشغيل الأمر:
|
||||
|
||||
`git checkout specific-commit-id
|
||||
`
|
||||
```shell
|
||||
git checkout specific-commit-id
|
||||
```
|
||||
|
||||
يمكننا الحصول على رقم تعريف الالتزام المحدد عن طريق تشغيل:
|
||||
|
||||
`git log
|
||||
`
|
||||
```shell
|
||||
git log
|
||||
```
|
||||
|
||||
### الخروج فرع موجود
|
||||
|
||||
للتحقق من فرع موجود ، قم بتشغيل الأمر:
|
||||
|
||||
`git checkout BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git checkout BRANCH-NAME
|
||||
```
|
||||
|
||||
بشكل عام ، لن تسمح لك Git بالتسجيل في فرع آخر ما لم يكن دليل عملك نظيفًا ، لأنك ستفقد أي تغييرات في دليل العمل غير ملتزم بها. لديك ثلاثة خيارات للتعامل مع تغييراتك: 1) قم بسحبها ، 2) [ارتكابها](https://guide.freecodecamp.org/git/git-commit/) ، أو 3) [خبأتها](https://guide.freecodecamp.org/git/git-stash/) .
|
||||
|
||||
@ -31,8 +34,9 @@ localeTitle: بوابة الخروج
|
||||
|
||||
لإنشاء فرع جديد بأمر واحد والخروج منه ، يمكنك استخدام:
|
||||
|
||||
`git checkout -b NEW-BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git checkout -b NEW-BRANCH-NAME
|
||||
```
|
||||
|
||||
سيؤدي هذا إلى تبديلك تلقائيًا إلى الفرع الجديد.
|
||||
|
||||
@ -40,8 +44,9 @@ localeTitle: بوابة الخروج
|
||||
|
||||
يشبه الأمر التالي التحقق من فرع جديد ، ولكنه يستخدم علامة `-B` (لاحظ علامة captional B) ومعلمة `START-POINT` اختيارية:
|
||||
|
||||
`git checkout -B BRANCH-NAME START-POINT
|
||||
`
|
||||
```shell
|
||||
git checkout -B BRANCH-NAME START-POINT
|
||||
```
|
||||
|
||||
إذا كان `BRANCH-NAME` غير موجود ، فسيقوم Git بإنشائه وبدء تشغيله عند `START-POINT` . إذا كان `BRANCH-NAME` موجودًا بالفعل ، فعندئذٍ يقوم Git بإعادة تعيين الفرع إلى `START-POINT` . هذا يعادل تشغيل `git branch` مع `-f` .
|
||||
|
||||
@ -51,15 +56,17 @@ localeTitle: بوابة الخروج
|
||||
|
||||
عند تشغيل الأمر التالي ، سيتجاهل Git الإدخالات غير المدمجة:
|
||||
|
||||
`git checkout -f BRANCH-NAME
|
||||
|
||||
# Alternative
|
||||
git checkout --force BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git checkout -f BRANCH-NAME
|
||||
|
||||
# Alternative
|
||||
git checkout --force BRANCH-NAME
|
||||
```
|
||||
|
||||
### التراجع عن التغييرات في دليل العمل الخاص بك
|
||||
|
||||
يمكنك استخدام أمر `git checkout` للتراجع عن التغييرات التي أجريتها على ملف في دليل العمل. سيؤدي هذا إلى إعادة الملف إلى الإصدار في `HEAD` :
|
||||
|
||||
`git checkout -- FILE-NAME
|
||||
`
|
||||
```shell
|
||||
git checkout -- FILE-NAME
|
||||
```
|
@ -10,15 +10,17 @@ localeTitle: Git Cherry Pick
|
||||
|
||||
لتطبيق التغيير الذي تم تقديمه بواسطة الالتزام على طرف الفرع الرئيسي وإنشاء التزام جديد بهذا التغيير. قم بتشغيل الأمر التالي
|
||||
|
||||
`git cherry-pick master
|
||||
`
|
||||
```shell
|
||||
git cherry-pick master
|
||||
```
|
||||
|
||||
### تحقق في تغيير من التزام مختلف
|
||||
|
||||
لتطبيق التغيير الذي تم تقديمه بواسطة الالتزام في قيمة التجزئة المحددة التي تريدها ، قم بتشغيل الأمر التالي
|
||||
|
||||
`git cherry-pick {HASHVALUE}
|
||||
`
|
||||
```shell
|
||||
git cherry-pick {HASHVALUE}
|
||||
```
|
||||
|
||||
سيؤدي هذا إلى إضافة التغييرات التي تمت الإشارة إليها في الالتزام ، إلى المستودع الحالي الخاص بك
|
||||
|
||||
@ -26,16 +28,19 @@ localeTitle: Git Cherry Pick
|
||||
|
||||
يسمح لك `cherry-pick` بالاختيار بين عمليات من فرع واحد إلى آخر. دعونا نقول لديك فرعين `master` و `develop-1` . في الفرع `develop-1` لديك 3 تلتزم مع تعهدات التزام `commit-1` ، `commit-2` `commit-3` . هنا يمكنك تطبيق `commit-2` على الفرع `master` خلال:
|
||||
|
||||
`git checkout master
|
||||
git cherry-pick commit-2
|
||||
`
|
||||
```shell
|
||||
git checkout master
|
||||
git cherry-pick commit-2
|
||||
```
|
||||
|
||||
إذا واجهت أي تعارضات في هذه المرحلة ، فيجب عليك إصلاحها وإضافتها باستخدام `git add` ، ثم يمكنك استخدام علامة متابعة لتطبيق اختيار cherry-pick.
|
||||
|
||||
`git cherry-pick --continue
|
||||
`
|
||||
```shell
|
||||
git cherry-pick --continue
|
||||
```
|
||||
|
||||
إذا كنت ترغب في إجهاض اختيار الكرز فيما بين يمكنك استخدام علامة abort:
|
||||
|
||||
`git cherry-pick --abort
|
||||
`
|
||||
```shell
|
||||
git cherry-pick --abort
|
||||
```
|
@ -10,13 +10,15 @@ localeTitle: جيت استنس
|
||||
|
||||
في سطر الأوامر على جهازك المحلي ، انتقل إلى المكان الذي تريد حفظ المشروع في دليل العمل الخاص بك. وأخيرًا ، قم بتشغيل الأمر `git clone` :
|
||||
|
||||
`git clone URL-OF-REPOSITORY
|
||||
`
|
||||
```shell
|
||||
git clone URL-OF-REPOSITORY
|
||||
```
|
||||
|
||||
الاسم الافتراضي للدليل الجديد على جهاز الكمبيوتر الخاص بك هو اسم المستودع ، ولكن يمكنك تغيير ذلك عن طريق تضمين المعلمة (اختياري) الأخيرة:
|
||||
|
||||
`git clone URL-OF-REPOSITORY NAME-OF-DIRECTORY-ON-COMPUTER
|
||||
`
|
||||
```shell
|
||||
git clone URL-OF-REPOSITORY NAME-OF-DIRECTORY-ON-COMPUTER
|
||||
```
|
||||
|
||||
يعطي Git البعيد الاسم المستعار "الأصل". هذه طريقة مفيدة للإشارة إلى جهاز التحكم عن بعد عندما تريد دفع تغييراتك إلى الخادم البعيد أو سحب التغييرات منه. انظر [Git push](https://guide.freecodecamp.org/git/git-push/) و [Git pull](https://guide.freecodecamp.org/git/git-pull/) لمزيد من التفاصيل.
|
||||
|
||||
@ -24,12 +26,13 @@ Git يسحب فقط الفرع الرئيسي عن بعد على جهاز الك
|
||||
|
||||
أيضا ، Git تلقائيا بإعداد الفرع الرئيسي المحلي لتتبع الفرع البعيد. عند تشغيل `git status` ، سترى معلومات حول ما إذا كان الفرع المحلي لديك محدثًا مع جهاز التحكم عن بُعد. إليك مثال على الناتج:
|
||||
|
||||
`myCommandPrompt (master) >> git status
|
||||
On branch master
|
||||
Your branch is up-to-date with 'origin/master'.
|
||||
nothing to commit, working tree clean
|
||||
myCommandPrompt (master) >>
|
||||
`
|
||||
```shell
|
||||
myCommandPrompt (master) >> git status
|
||||
On branch master
|
||||
Your branch is up-to-date with 'origin/master'.
|
||||
nothing to commit, working tree clean
|
||||
myCommandPrompt (master) >>
|
||||
```
|
||||
|
||||
إذا كان فرعك المحلي `master` يحتوي على ثلاث تعهدات لم تقم بدفعها إلى الخادم البعيد بعد ، فإن الحالة ستقول "الفرع الخاص بك متقدم على" الأصل / الرئيسي "بـ 3 مرات."
|
||||
|
||||
@ -37,13 +40,15 @@ Git يسحب فقط الفرع الرئيسي عن بعد على جهاز الك
|
||||
|
||||
إذا كنت ترغب في استضافة مرآة لمستودع ، فيمكنك استخدام معلمة mirror.
|
||||
|
||||
`git clone URL-OF-REPOSITORY --mirror
|
||||
`
|
||||
```shell
|
||||
git clone URL-OF-REPOSITORY --mirror
|
||||
```
|
||||
|
||||
بعد إجراء نسخ متطابق لمستودع ، يمكنك استنساخ المرآة المحلية من الخادم الخاص بك.
|
||||
|
||||
`git clone NAME-OF-DIRECTORY-ON-COMPUTER
|
||||
`
|
||||
```shell
|
||||
git clone NAME-OF-DIRECTORY-ON-COMPUTER
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -21,8 +21,9 @@ localeTitle: جايت كومت
|
||||
|
||||
مثال على كيفية استخدام الخيار `-m` :
|
||||
|
||||
`git commit -m "My message"
|
||||
`
|
||||
```shell
|
||||
git commit -m "My message"
|
||||
```
|
||||
|
||||
يجب أن يبدو الإخراج في المحطة الطرفية كالتالي:
|
||||
|
||||
@ -42,8 +43,9 @@ localeTitle: جايت كومت
|
||||
|
||||
مثال على كيفية استخدام الخيار `-a` :
|
||||
|
||||
`git commit -am “My new changes”
|
||||
`
|
||||
```shell
|
||||
git commit -am “My new changes”
|
||||
```
|
||||
|
||||
يجب أن يبدو الإخراج في المحطة الطرفية كالتالي:
|
||||
|
||||
@ -67,18 +69,20 @@ localeTitle: جايت كومت
|
||||
|
||||
يتيح لك خيار `--amend` تغيير `--amend` الأخير. لنفترض أنك ارتكبت للتو وأنك ارتكبت خطأ في رسالة سجل الالتزام. يمكنك تعديل أحدث الالتزام باستخدام الأمر:
|
||||
|
||||
`git commit --amend -m "an updated commit message"
|
||||
`
|
||||
```shell
|
||||
git commit --amend -m "an updated commit message"
|
||||
```
|
||||
|
||||
إذا نسيت تضمين ملف في الالتزام:
|
||||
|
||||
`git add FORGOTTEN-FILE-NAME
|
||||
git commit --amend -m "an updated commit message"
|
||||
|
||||
# If you don't need to change the commit message, use the --no-edit option
|
||||
git add FORGOTTEN-FILE-NAME
|
||||
git commit --amend --no-edit
|
||||
`
|
||||
```shell
|
||||
git add FORGOTTEN-FILE-NAME
|
||||
git commit --amend -m "an updated commit message"
|
||||
|
||||
# If you don't need to change the commit message, use the --no-edit option
|
||||
git add FORGOTTEN-FILE-NAME
|
||||
git commit --amend --no-edit
|
||||
```
|
||||
|
||||
تحدث الإلتزامات السابقة لأوانها طوال الوقت في سياق تطورك اليومي. من السهل نسيان تقديم ملف أو كيفية تنسيق رسالة الالتزام الخاصة بك بشكل صحيح. يعد علم `--amend` طريقة ملائمة لإصلاح هذه الأخطاء الصغيرة. سيحل هذا الأمر محل رسالة الالتزام القديمة مع الرسالة المحدثة المحددة في الأمر.
|
||||
|
||||
@ -86,8 +90,9 @@ localeTitle: جايت كومت
|
||||
|
||||
باستخدام `--amend` ، أحد `--amend` المفيدة التي يمكنك استخدامها هو `--author` والذي يمكنك من تغيير مؤلف آخر التزام قمت به. تخيل موقفًا لم تقم بإعداد اسمك أو بريدك الإلكتروني بشكل صحيح في تكوينات git ولكنك ارتكبت بالفعل التزامًا. مع العلم `--author` يمكنك ببساطة تغييرها دون إعادة التعيين الأخير.
|
||||
|
||||
`git commit --amend --author="John Doe <johndoe@email.com>"
|
||||
`
|
||||
```
|
||||
git commit --amend --author="John Doe <johndoe@email.com>"
|
||||
```
|
||||
|
||||
#### الخيار -v أو --verbose
|
||||
|
||||
|
@ -8,34 +8,39 @@ localeTitle: جيت ميرج
|
||||
|
||||
بناء جملة الأمر كما يلي:
|
||||
|
||||
`git merge BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
git merge BRANCH-NAME
|
||||
```
|
||||
|
||||
على سبيل المثال ، إذا كنت تعمل حاليًا في فرع باسم `dev` وترغب في دمج أي تغييرات جديدة تم إجراؤها في فرع باسم `new-features` ، فستقوم بإصدار الأمر التالي:
|
||||
|
||||
`git merge new-features
|
||||
`
|
||||
```shell
|
||||
git merge new-features
|
||||
```
|
||||
|
||||
**يرجى ملاحظة:** إذا كانت هناك أي تغييرات غير ملزمة على فرعك الحالي ، فلن تسمح لك Git بالدمج حتى يتم الالتزام بكافة التغييرات في الفرع الحالي. للتعامل مع هذه التغييرات ، يمكنك إما:
|
||||
|
||||
* إنشاء فرع جديد وإلزام التغييرات
|
||||
|
||||
`git checkout -b new-branch-name
|
||||
git add .
|
||||
git commit -m "<your commit message>"
|
||||
`
|
||||
```shell
|
||||
git checkout -b new-branch-name
|
||||
git add .
|
||||
git commit -m "<your commit message>"
|
||||
```
|
||||
|
||||
* خبأهم
|
||||
|
||||
`git stash # add them to the stash
|
||||
git merge new-features # do your merge
|
||||
git stash pop # get the changes back into your working tree
|
||||
`
|
||||
```shell
|
||||
git stash # add them to the stash
|
||||
git merge new-features # do your merge
|
||||
git stash pop # get the changes back into your working tree
|
||||
```
|
||||
|
||||
* التخلي عن كل شيء
|
||||
|
||||
`git reset --hard # removes all pending changes
|
||||
`
|
||||
```shell
|
||||
git reset --hard # removes all pending changes
|
||||
```
|
||||
|
||||
## دمج الصراع
|
||||
|
||||
|
@ -15,12 +15,13 @@ localeTitle: بوابة سحب
|
||||
|
||||
بناء جملة هذا الأمر هو كما يلي:
|
||||
|
||||
`# General format
|
||||
git pull OPTIONS REPOSITORY REFSPEC
|
||||
|
||||
# Pull from specific branch
|
||||
git pull REMOTE-NAME BRANCH-NAME
|
||||
`
|
||||
```shell
|
||||
# General format
|
||||
git pull OPTIONS REPOSITORY REFSPEC
|
||||
|
||||
# Pull from specific branch
|
||||
git pull REMOTE-NAME BRANCH-NAME
|
||||
```
|
||||
|
||||
بحيث:
|
||||
|
||||
|
@ -10,8 +10,9 @@ localeTitle: Git Push
|
||||
|
||||
بناء جملة هذا الأمر هو كما يلي:
|
||||
|
||||
`git push <repo name> <branch name>
|
||||
`
|
||||
```bash
|
||||
git push <repo name> <branch name>
|
||||
```
|
||||
|
||||
هناك عدد من الخيارات المختلفة التي يمكنك تمريرها باستخدام الأمر ، يمكنك معرفة المزيد عنها في [وثائق Git](https://git-scm.com/docs/git-push#_options_a_id_options_a) أو تشغيل `git push --help` .
|
||||
|
||||
@ -38,8 +39,9 @@ localeTitle: Git Push
|
||||
|
||||
إذا كنت ترغب في دفع جميع التغييرات الخاصة بك إلى مستودع بعيد وجميع الفروع في ذلك ، يمكنك استخدام:
|
||||
|
||||
`git push --all <REMOTE-NAME>
|
||||
`
|
||||
```bash
|
||||
git push --all <REMOTE-NAME>
|
||||
```
|
||||
|
||||
بحيث:
|
||||
|
||||
@ -50,8 +52,9 @@ localeTitle: Git Push
|
||||
|
||||
إذا كنت ترغب في تجاهل التغييرات المحلية التي تم إجراؤها على مستودع Git في GitHub (الذي يفعله معظم المطورين للحصول على إصلاح سريع لخادم التطوير) ، يمكنك استخدام الأمر -force للدفع عن طريق تجاهل تلك التغييرات.
|
||||
|
||||
`git push --force <REMOTE-NAME> <BRANCH-NAME>
|
||||
`
|
||||
```bash
|
||||
git push --force <REMOTE-NAME> <BRANCH-NAME>
|
||||
```
|
||||
|
||||
بحيث:
|
||||
|
||||
@ -62,8 +65,9 @@ localeTitle: Git Push
|
||||
|
||||
افتراضيا ستطلق `git push` مفتاح `--verify` . وهذا يعني أن بوابة git ستنفذ أي برنامج نصي مسبق الدفع من جانب العميل قد يكون تم تكوينه. إذا فشلت النصوص التمهيدية ، فستدفع البوابة. (الخطافات مسبقة الدفع هي جيدة للقيام بأشياء مثل ، والتحقق مما إذا كانت رسائل الالتزام تؤكد معايير الشركة ، أو تشغيل اختبارات الوحدة ، الخ ...). قد ترغب أحيانًا في تجاهل هذا السلوك الافتراضي ، على سبيل المثال في السيناريو الذي ترغب فيه في دفع تغييراتك إلى فرع ميزة لمساهم آخر لسحبه ، ولكن تغييرات عملك في التقدم تخترق اختبارات الوحدة. لتجاهل الخطاف ، ما عليك سوى إدخال أمر الدفع وإضافة العلامة `--no-verify`
|
||||
|
||||
`git push --no-verify
|
||||
`
|
||||
```bash
|
||||
git push --no-verify
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -40,31 +40,32 @@ localeTitle: الذهاب Rebase
|
||||
* في vim ، اضغط على `esc` ، ثم `i` لبدء تحرير الاختبار.
|
||||
* على الجانب الأيسر يمكنك الكتابة فوق `pick` واحد من الأوامر أدناه. إذا كنت تريد إسقاط التزام في السابق وتجاهل رسالة الالتزام ، أدخل `f` في مكان `pick` الالتزام.
|
||||
|
||||
`pick 452b159 <message for this commit>
|
||||
pick 7fd4192 <message for this commit>
|
||||
pick c1af3e5 <message for this commit>
|
||||
pick 5f5e8d3 <message for this commit>
|
||||
pick 5186a9f <message for this commit>
|
||||
|
||||
# Rebase 0617e63..5186a9f onto 0617e63 (30 commands)
|
||||
#
|
||||
# Commands:
|
||||
# p, pick = use commit
|
||||
# r, reword = use commit, but edit the commit message
|
||||
# e, edit = use commit, but stop for amending
|
||||
# s, squash = use commit, but meld into previous commit
|
||||
# f, fixup = like "squash", but discard this commit's log message
|
||||
# x, exec = run command (the rest of the line) using shell
|
||||
# d, drop = remove commit
|
||||
#
|
||||
# These lines can be re-ordered; they are executed from top to bottom.
|
||||
#
|
||||
# If you remove a line here THAT COMMIT WILL BE LOST.
|
||||
#
|
||||
# However, if you remove everything, the rebase will be aborted.
|
||||
#
|
||||
# Note that empty commits are commented out
|
||||
`
|
||||
```
|
||||
pick 452b159 <message for this commit>
|
||||
pick 7fd4192 <message for this commit>
|
||||
pick c1af3e5 <message for this commit>
|
||||
pick 5f5e8d3 <message for this commit>
|
||||
pick 5186a9f <message for this commit>
|
||||
|
||||
# Rebase 0617e63..5186a9f onto 0617e63 (30 commands)
|
||||
#
|
||||
# Commands:
|
||||
# p, pick = use commit
|
||||
# r, reword = use commit, but edit the commit message
|
||||
# e, edit = use commit, but stop for amending
|
||||
# s, squash = use commit, but meld into previous commit
|
||||
# f, fixup = like "squash", but discard this commit's log message
|
||||
# x, exec = run command (the rest of the line) using shell
|
||||
# d, drop = remove commit
|
||||
#
|
||||
# These lines can be re-ordered; they are executed from top to bottom.
|
||||
#
|
||||
# If you remove a line here THAT COMMIT WILL BE LOST.
|
||||
#
|
||||
# However, if you remove everything, the rebase will be aborted.
|
||||
#
|
||||
# Note that empty commits are commented out
|
||||
```
|
||||
|
||||
* أدخل `esc` متبوعة `:wq` .
|
||||
* إذا تم إعادة تعيينها بنجاح ، فستحتاج إلى فرض التغييرات على `git push -f` باستخدام `git push -f` لإضافة الإصدار المعاد توجيهه إلى repub github.
|
||||
|
@ -14,8 +14,9 @@ localeTitle: غيت عن بعد
|
||||
|
||||
### قائمة جميع مستودعات بعيد تكوينها
|
||||
|
||||
`git remote -v
|
||||
`
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
يسرد هذا الأمر جميع المستودعات البعيدة بجانب موقعها.
|
||||
|
||||
@ -27,34 +28,39 @@ localeTitle: غيت عن بعد
|
||||
|
||||
لإضافة مستودع تخزين عن بعد إلى مشروعك ، يمكنك تشغيل الأمر التالي:
|
||||
|
||||
`git remote add REMOTE-NAME REMOTE-URL
|
||||
`
|
||||
```bash
|
||||
git remote add REMOTE-NAME REMOTE-URL
|
||||
```
|
||||
|
||||
يمكن أن يكون `REMOTE-URL` إما HTTPS أو SSH. يمكنك العثور على عنوان URL على GitHub بالنقر على القائمة المنسدلة "نسخ أو تنزيل" في المستودع.
|
||||
|
||||
على سبيل المثال ، إذا كنت ترغب في إضافة مستودع تخزين بعيد ووصفه `example` ، فيمكنك تشغيل:
|
||||
|
||||
`git remote add example https://example.org/my-repo.git
|
||||
`
|
||||
```bash
|
||||
git remote add example https://example.org/my-repo.git
|
||||
```
|
||||
|
||||
### تحديث عنوان URL بعيد
|
||||
|
||||
إذا تغير عنوان URL لمستودع تخزين عن بعد ، فيمكنك تحديثه باستخدام الأمر التالي ، حيث `example` هو اسم جهاز التحكم عن بعد:
|
||||
|
||||
`git remote set-url example https://example.org/my-new-repo.git
|
||||
`
|
||||
```bash
|
||||
git remote set-url example https://example.org/my-new-repo.git
|
||||
```
|
||||
|
||||
### حذف أجهزة التحكم عن بعد
|
||||
|
||||
يتم حذف أجهزة التحكم عن بعد مثل:
|
||||
|
||||
`git remote rm REMOTE-NAME
|
||||
`
|
||||
```bash
|
||||
git remote rm REMOTE-NAME
|
||||
```
|
||||
|
||||
يمكنك التأكد من اختفاء جهاز التحكم عن بعد من خلال عرض قائمة أجهزة التحكم عن بعد الموجودة لديك:
|
||||
|
||||
`git remote -v
|
||||
`
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -10,15 +10,17 @@ localeTitle: غيت ريسيت
|
||||
|
||||
يتيح لك الأمر التالي اختيار أجزاء من المحتوى بشكل انتقائي والعودة أو إلغاء تثبيتها.
|
||||
|
||||
`git reset (--patch | -p) [tree-ish] [--] [paths]
|
||||
`
|
||||
```shell
|
||||
git reset (--patch | -p) [tree-ish] [--] [paths]
|
||||
```
|
||||
|
||||
### قم بإلغاء تثبيت ملف
|
||||
|
||||
إذا قمت بنقل ملف إلى منطقة التدريج مع `git add` ، ولكن لم تعد ترغب في أن يكون جزءًا من التزام ، يمكنك استخدام `git reset` لإلغاء تثبيت هذا الملف:
|
||||
|
||||
`git reset HEAD FILE-TO-UNSTAGE
|
||||
`
|
||||
```shell
|
||||
git reset HEAD FILE-TO-UNSTAGE
|
||||
```
|
||||
|
||||
ستظل التغييرات التي أجريتها في الملف ، وهذا الأمر يزيل فقط هذا الملف من منطقة التدريج الخاصة بك.
|
||||
|
||||
@ -26,8 +28,9 @@ localeTitle: غيت ريسيت
|
||||
|
||||
يقوم الأمر التالي بإعادة تعيين HEAD الفرع الحالي الخاص بك إلى `COMMIT` المعطى ويقوم بتحديث الفهرس. إنها ترجع بشكل أساسي حالة فرعك ، ثم تلتزم جميعًا بالتقدم في الكتابة على أي شيء جاء بعد نقطة إعادة التعيين. إذا حذفت الدالة `MODE` ، `--mixed` الافتراضي لها - `--mixed` :
|
||||
|
||||
`git reset MODE COMMIT
|
||||
`
|
||||
```shell
|
||||
git reset MODE COMMIT
|
||||
```
|
||||
|
||||
الخيارات الخاصة بـ `MODE` هي:
|
||||
|
||||
|
@ -9,8 +9,9 @@ localeTitle: Git Show
|
||||
|
||||
بناء جملة هذا الأمر هو كما يلي:
|
||||
|
||||
`git show [<options>] [<object>…]
|
||||
`
|
||||
```bash
|
||||
git show [<options>] [<object>…]
|
||||
```
|
||||
|
||||
لكائنات مختلفة بوابة `git show` يعطي مخرجات مختلفة.
|
||||
|
||||
@ -21,8 +22,9 @@ localeTitle: Git Show
|
||||
|
||||
الاستخدام الأكثر شيوعًا لـ `git show` سيكون بالاشتراك مع كائن git commit
|
||||
|
||||
`git show 3357d63
|
||||
`
|
||||
```bash
|
||||
git show 3357d63
|
||||
```
|
||||
|
||||
ستحصل على إنتاج مشابه لـ ،
|
||||
|
||||
|
Reference in New Issue
Block a user