ورود به حساب

نام کاربری گذرواژه

گذرواژه را فراموش کردید؟ کلیک کنید

حساب کاربری ندارید؟ ساخت حساب

ساخت حساب کاربری

نام نام کاربری ایمیل شماره موبایل گذرواژه

برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید


09117307688
09117179751

در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید

دسترسی نامحدود

برای کاربرانی که ثبت نام کرده اند

ضمانت بازگشت وجه

درصورت عدم همخوانی توضیحات با کتاب

پشتیبانی

از ساعت 7 صبح تا 10 شب

دانلود کتاب Building Git

دانلود کتاب ساخت Git

Building Git

مشخصات کتاب

Building Git

ویرایش: 2020-04-10 
نویسندگان:   
سری:  
 
ناشر: James Coglan 
سال نشر: 2020 
تعداد صفحات: 733 
زبان: English 
فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) 
حجم فایل: 6 مگابایت 

قیمت کتاب (تومان) : 37,000



کلمات کلیدی مربوط به کتاب ساخت Git: گیت یاقوت



ثبت امتیاز به این کتاب

میانگین امتیاز به این کتاب :
       تعداد امتیاز دهندگان : 18


در صورت تبدیل فایل کتاب Building Git به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.

توجه داشته باشید کتاب ساخت Git نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.


توضیحاتی در مورد کتاب ساخت Git

Building Git یک فرو رفتن عمیق در داخل سیستم کنترل نسخه Git است. با بازسازی آن در یک زبان برنامه نویسی سطح بالا، علم کامپیوتر را در پشت این ابزار پرکاربرد بررسی می کنیم. در این فرآیند، ما درک عمیق تری از خود Git به دست می آوریم و همچنین مجموعه گسترده ای از موضوعات برنامه نویسی کاربردی را پوشش می دهیم، از جمله: مفاهیم یونیکس خواندن و نوشتن از فایل ها، اتمی جلوه دادن نوشته ها، از شرایط مسابقه بین فرآیندها جلوگیری می کند راه اندازی فرآیندهای کودک در پیش زمینه و پس زمینه، برقراری ارتباط همزمان با آنها نمایش خروجی در ترمینال، از جمله قالب بندی رنگ، خروجی صفحه، و تعامل با ویرایشگر متن کاربر تجزیه فرمت های مختلف فایل، از جمله مدل commit مبتنی بر درخت مرکل Git، فهرست، فایل های پیکربندی و فایل های شی بسته بندی شده ساختارهای داده چگونه Git محتوا را روی دیسک ذخیره می کند تا از فضا استفاده موثری کند، تاریخچه را برای جستجو کارآمد کند و تشخیص تفاوت بین تعهدات را آسان کند. استفاده از diffs برای به‌روزرسانی مؤثر محتویات فضای کاری هنگام بررسی یک commit جدید استفاده موثر از ساختارهای داده در حافظه ساده برای حل مسائل برنامه نویسی تجزیه و تفسیر یک زبان پرس و جو برای آدرس دهی commit ها ویرایش همزمان چگونه Git از شاخه ها برای مدل سازی ویرایش های همزمان استفاده می کند الگوریتم هایی برای تشخیص تفاوت بین نسخه های فایل و ادغام مجدد شاخه ها با یکدیگر چرا تداخل ادغام اتفاق می افتد، چگونه می توان از آنها اجتناب کرد، و چگونه Git به کاربران کمک می کند تا از به روز رسانی های از دست رفته جلوگیری کنند چگونه می توان از ادغام به عنوان مبنایی برای عملیات های متعدد برای ویرایش تاریخچه commit استفاده کرد مهندسی نرم افزار بوت استرپ و رشد یک سیستم میزبانی خود توسعه آزمایش محور Refactoring برای فعال کردن توسعه ویژگی های جدید طراحی نرم‌افزاری فقط با خرابی که اجازه می‌دهد برنامه‌ها قطع و از سر گرفته شوند شبکه سازی استفاده از SSH برای بوت استرپ یک پروتکل شبکه نحوه ارتباط مخازن Git برای به حداقل رساندن داده هایی که باید هنگام واکشی محتوا منتقل کنند چگونه پروتکل شبکه از عملیات اتمی برای جلوگیری از بازنویسی تغییرات یکدیگر توسط کاربران استفاده می کند


توضیحاتی درمورد کتاب به خارجی

Building Git is a deep dive into the internals of the Git version control system. By rebuilding it in a high-level programming language, we explore the computer science behind this widely used tool. In the process, we gain a deeper understanding of Git itself as well as covering a wide array of broadly applicable programming topics, including: Unix concepts Reading and writing from files, making writes appear atomic, prevent race conditions between processes Launching child processes in the foreground and background, communicating with them concurrently Displaying output in the terminal, including colour formatting, paged output, and interacting with the user’s text editor Parsing various file formats, including Git’s Merkle-tree-based commit model, the index, configuration files and packed object files Data structures How Git stores content on disk to make effective use of space, make the history efficient to search, and make it easy to detect differences between commits Using diffs to efficiently update the contents of the workspace when checking out a new commit Effectively using simple in-memory data structures to solve programming problems Parsing and interpreting a query language for addressing commits Concurrent editing How Git uses branches to model concurrent edits Algorithms for detecting differences between file versions and merging branches back together Why merge conflicts happen, how they can be avoided, and how Git helps users prevent lost updates How merging can be used as the basis for numerous operations to edit the commit history Software engineering Bootstrapping and growing a self-hosting system Test-driven development Refactoring to enable new feature development Crash-only software design that allows programs to be interrupted and resumed Networking Using SSH to bootstrap a network protocol How Git repositories communicate to minimise the data they need to transfer when fetching content How the network protocol uses atomic operations to prevent users overwriting each other’s changes



فهرست مطالب

Building Git
Contents
Change history
	1. (1.0.0) February 25th 2019
	2. (1.0.1) May 22nd 2019
	3. (1.0.2) October 31st 2019
	4. (1.0.3) April 10th 2020
License and acknowledgements
1. Introduction
	1.1. Prerequisites
	1.2. How the book is structured
	1.3. Typographic conventions
	1.4. The Jit codebase
2. Getting to know .git
	2.1. The .git directory
		2.1.1. .git/config
		2.1.2. .git/description
		2.1.3. .git/HEAD
		2.1.4. .git/info
		2.1.5. .git/hooks
		2.1.6. .git/objects
		2.1.7. .git/refs
	2.2. A simple commit
		2.2.1. .git/COMMIT_EDITMSG
		2.2.2. .git/index
		2.2.3. .git/logs
		2.2.4. .git/refs/heads/master
	2.3. Storing objects
		2.3.1. The cat-file command
		2.3.2. Blobs on disk
		2.3.3. Trees on disk
		2.3.4. Commits on disk
		2.3.5. Computing object IDs
		2.3.6. Problems with SHA-1
	2.4. The bare essentials
Part I. Storing changes
	3. The first commit
		3.1. Initialising a repository
			3.1.1. A basic init implementation
			3.1.2. Handling errors
			3.1.3. Running Jit for the first time
		3.2. The commit command
			3.2.1. Storing blobs
			3.2.2. Storing trees
			3.2.3. Storing commits
	4. Making history
		4.1. The parent field
			4.1.1. A link to the past
			4.1.2. Differences between trees
		4.2. Implementing the parent chain
			4.2.1. Safely updating .git/HEAD
			4.2.2. Concurrency and the filesystem
		4.3. Don’t overwrite objects
	5. Growing trees
		5.1. Executable files
			5.1.1. File modes
			5.1.2. Storing executables in trees
		5.2. Nested trees
			5.2.1. Recursive trees in Git
			5.2.2. Building a Merkle tree
			5.2.3. Flat or nested?
		5.3. Reorganising the project
	6. The index
		6.1. The add command
		6.2. Inspecting .git/index
		6.3. Basic add implementation
		6.4. Storing multiple entries
		6.5. Adding files from directories
	7. Incremental change
		7.1. Modifying the index
			7.1.1. Parsing .git/index
			7.1.2. Storing updates
		7.2. Committing from the index
		7.3. Stop making sense
			7.3.1. Starting a test suite
			7.3.2. Replacing a file with a directory
			7.3.3. Replacing a directory with a file
		7.4. Handling bad inputs
			7.4.1. Non-existent files
			7.4.2. Unreadable files
			7.4.3. Locked index file
	8. First-class commands
		8.1. Abstracting the repository
		8.2. Commands as classes
			8.2.1. Injecting dependencies
		8.3. Testing the commands
		8.4. Refactoring the commands
			8.4.1. Extracting common code
			8.4.2. Reorganising the add command
	9. Status report
		9.1. Untracked files
			9.1.1. Untracked files not in the index
			9.1.2. Untracked directories
			9.1.3. Empty untracked directories
		9.2. Index/workspace differences
			9.2.1. Changed contents
			9.2.2. Changed mode
			9.2.3. Size-preserving changes
			9.2.4. Timestamp optimisation
			9.2.5. Deleted files
	10. The next commit
		10.1. Reading from the database
			10.1.1. Parsing blobs
			10.1.2. Parsing commits
			10.1.3. Parsing trees
			10.1.4. Listing the files in a commit
		10.2. HEAD/index differences
			10.2.1. Added files
			10.2.2. Modified files
			10.2.3. Deleted files
		10.3. The long format
			10.3.1. Making the change easy
			10.3.2. Making the easy change
			10.3.3. Orderly change
		10.4. Printing in colour
	11. The Myers diff algorithm
		11.1. What’s in a diff?
		11.2. Time for some graph theory
			11.2.1. Walking the graph
			11.2.2. A change of perspective
			11.2.3. Implementing the shortest-edit search
		11.3. Retracing our steps
			11.3.1. Recording the search
			11.3.2. And you may ask yourself, how did I get here?
	12. Spot the difference
		12.1. Reusing status
		12.2. Just the headlines
			12.2.1. Unstaged changes
			12.2.2. A common pattern
			12.2.3. Staged changes
		12.3. Displaying edits
			12.3.1. Splitting edits into hunks
			12.3.2. Displaying diffs in colour
			12.3.3. Invoking the pager
Part II. Branching and merging
	13. Branching out
		13.1. Examining the branch command
		13.2. Creating a branch
		13.3. Setting the start point
			13.3.1. Parsing revisions
			13.3.2. Interpreting the AST
			13.3.3. Revisions and object IDs
	14. Migrating between trees
		14.1. Telling trees apart
		14.2. Planning the changes
		14.3. Updating the workspace
		14.4. Updating the index
		14.5. Preventing conflicts
			14.5.1. Single-file status checks
			14.5.2. Checking the migration for conflicts
			14.5.3. Reporting conflicts
		14.6. The perils of self-hosting
	15. Switching branches
		15.1. Symbolic references
			15.1.1. Tracking branch pointers
			15.1.2. Detached HEAD
			15.1.3. Retaining detached histories
		15.2. Linking HEAD on checkout
			15.2.1. Reading symbolic references
		15.3. Printing checkout results
		15.4. Updating HEAD on commit
			15.4.1. The master branch
		15.5. Branch management
			15.5.1. Parsing command-line options
			15.5.2. Listing branches
			15.5.3. Deleting branches
	16. Reviewing history
		16.1. Linear history
			16.1.1. Medium format
			16.1.2. Abbreviated commit IDs
			16.1.3. One-line format
			16.1.4. Branch decoration
			16.1.5. Displaying patches
		16.2. Branching histories
			16.2.1. Revision lists
			16.2.2. Logging multiple branches
			16.2.3. Excluding branches
			16.2.4. Filtering by changed paths
	17. Basic merging
		17.1. What is a merge?
			17.1.1. Merging single commits
			17.1.2. Merging a chain of commits
			17.1.3. Interpreting merges
		17.2. Finding the best common ancestor
		17.3. Commits with multiple parents
		17.4. Performing a merge
		17.5. Best common ancestors with merges
		17.6. Logs in a merging history
			17.6.1. Following all commit parents
			17.6.2. Hiding patches for merge commits
			17.6.3. Pruning treesame commits
			17.6.4. Following only treesame parents
		17.7. Revisions with multiple parents
	18. When merges fail
		18.1. A little refactoring
		18.2. Null and fast-forward merges
			18.2.1. Merging an existing ancestor
			18.2.2. Fast-forward merge
		18.3. Conflicted index entries
			18.3.1. Inspecting the conflicted repository
			18.3.2. Stages in the index
			18.3.3. Storing entries by stage
			18.3.4. Storing conflicts
		18.4. Conflict detection
			18.4.1. Concurrency, causality and locks
			18.4.2. Add/edit/delete conflicts
			18.4.3. File/directory conflicts
	19. Conflict resolution
		19.1. Printing conflict warnings
		19.2. Conflicted status
			19.2.1. Long status format
			19.2.2. Porcelain status format
		19.3. Conflicted diffs
			19.3.1. Unmerged paths
			19.3.2. Selecting stages
		19.4. Resuming a merge
			19.4.1. Resolving conflicts in the index
			19.4.2. Retaining state across commands
			19.4.3. Writing a merge commit
	20. Merging inside files
		20.1. The diff3 algorithm
			20.1.1. Worked example
			20.1.2. Implementing diff3
			20.1.3. Using diff3 during a merge
		20.2. Logging merge commits
			20.2.1. Unifying hunks
			20.2.2. Diffs during merge conflicts
			20.2.3. Diffs for merge commits
	21. Correcting mistakes
		21.1. Removing files from the index
			21.1.1. Preventing data loss
			21.1.2. Refinements to the rm command
		21.2. Resetting the index state
			21.2.1. Resetting to a different commit
		21.3. Discarding commits from your branch
			21.3.1. Hard reset
			21.3.2. I’m losing my HEAD
		21.4. Escaping from merges
	22. Editing messages
		22.1. Setting the commit message
		22.2. Composing the commit message
			22.2.1. Launching the editor
			22.2.2. Starting and resuming merges
		22.3. Reusing messages
			22.3.1. Amending the HEAD
			22.3.2. Recording the committer
	23. Cherry-picking
		23.1. Cherry-picking a single commit
			23.1.1. New types of pending commit
			23.1.2. Resuming from conflicts
		23.2. Multiple commits and ranges
			23.2.1. Rev-list without walking
			23.2.2. Conflicts during ranges
			23.2.3. When all else fails
	24. Reshaping history
		24.1. Changing old commits
			24.1.1. Amending an old commit
			24.1.2. Reordering commits
		24.2. Rebase
			24.2.1. Rebase onto a different branch
			24.2.2. Interactive rebase
		24.3. Reverting existing commits
			24.3.1. Cherry-pick in reverse
			24.3.2. Sequencing infrastructure
			24.3.3. The revert command
			24.3.4. Pending commit status
			24.3.5. Reverting merge commits
		24.4. Stashing changes
Part III. Distribution
	25. Configuration
		25.1. The Git config format
			25.1.1. Whitespace and comments
			25.1.2. Abstract and concrete representation
		25.2. Modelling the .git/config file
			25.2.1. Parsing the configuration
			25.2.2. Manipulating the settings
			25.2.3. The configuration stack
		25.3. Applications
			25.3.1. Launching the editor
			25.3.2. Setting user details
			25.3.3. Changing diff formatting
			25.3.4. Cherry-picking merge commits
	26. Remote repositories
		26.1. Storing remote references
		26.2. The remote command
			26.2.1. Adding a remote
			26.2.2. Removing a remote
			26.2.3. Listing remotes
		26.3. Refspecs
		26.4. Finding objects
	27. The network protocol
		27.1. Programs as ad-hoc servers
		27.2. Remote agents
		27.3. The packet-line protocol
		27.4. The pack format
			27.4.1. Writing packs
			27.4.2. Reading from packs
			27.4.3. Reading from a stream
	28. Fetching content
		28.1. Pack negotiation
			28.1.1. Non-fast-forward updates
		28.2. The fetch and upload-pack commands
			28.2.1. Connecting to the remote
			28.2.2. Transferring references
			28.2.3. Negotiating the pack
			28.2.4. Sending object packs
			28.2.5. Updating remote refs
			28.2.6. Connecting to remote repositories
		28.3. Clone and pull
			28.3.1. Pulling and rebasing
			28.3.2. Historic disagreement
	29. Pushing changes
		29.1. Shorthand refspecs
		29.2. The push and receive-pack commands
			29.2.1. Sending update requests
			29.2.2. Updating remote refs
			29.2.3. Validating update requests
		29.3. Progress meters
	30. Delta compression
		30.1. The XDelta algorithm
			30.1.1. Comparison with diffs
			30.1.2. Implementation
		30.2. Delta encoding
		30.3. Expanding deltas
	31. Compressing packs
		31.1. Finding similar objects
			31.1.1. Generating object paths
			31.1.2. Sorting packed objects
		31.2. Forming delta pairs
			31.2.1. Sliding-window compression
			31.2.2. Limiting delta chain length
		31.3. Writing and reading deltas
	32. Packs in the database
		32.1. Indexing packs
			32.1.1. Extracting TempFile
			32.1.2. Processing the incoming pack
			32.1.3. Generating the index
			32.1.4. Reconstructing objects
			32.1.5. Storing the index
		32.2. A new database backend
			32.2.1. Reading the pack index
			32.2.2. Replacing the backend
		32.3. Offset deltas
	33. Working with remote branches
		33.1. Remote-tracking branches
			33.1.1. Logging remote branches
			33.1.2. Listing remote branches
		33.2. Upstream branches
			33.2.1. Setting an upstream branch
			33.2.2. Safely deleting branches
			33.2.3. Upstream branch divergence
			33.2.4. The @{upstream} revision
			33.2.5. Fetching and pushing upstream
	34. …and everything else
Part IV. Appendices
	Appendix A. Programming in Ruby
		A.1. Installation
		A.2. Core language
			A.2.1. Control flow
			A.2.2. Error handling
			A.2.3. Objects, classes, and methods
			A.2.4. Blocks
			A.2.5. Constants
		A.3. Built-in data types
			A.3.1. true, false and nil
			A.3.2. Integer
			A.3.3. String
			A.3.4. Regexp
			A.3.5. Symbol
			A.3.6. Array
			A.3.7. Range
			A.3.8. Hash
			A.3.9. Struct
		A.4. Mixins
			A.4.1. Enumerable
			A.4.2. Comparable
		A.5. Libraries
			A.5.1. Digest
			A.5.2. FileUtils
			A.5.3. Forwardable
			A.5.4. Open3
			A.5.5. OptionParser
			A.5.6. Pathname
			A.5.7. Set
			A.5.8. Shellwords
			A.5.9. StringIO
			A.5.10. StringScanner
			A.5.11. Time
			A.5.12. URI
			A.5.13. Zlib
	Appendix B. Bitwise arithmetic




نظرات کاربران