
Git
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
- Detailed exploration of advanced Git features like rebasing, hooks, and submodules
- Practical troubleshooting guide to address common Git errors and conflicts
Book DescriptionThis practical guide is designed to take you from Git beginner to advanced user. Starting with installation and configuration, it covers the essential Git commands you'll need to create and manage repositories, track changes, and work with branches and commits. These fundamental concepts set the stage for more complex workflows and efficient version control management. The book then explores advanced features, such as using platforms like GitHub and GitLab for remote repositories. You'll learn how to collaborate with others through pull requests, set up continuous integration pipelines, and implement automation using hooks. The guide also includes advanced techniques like rebasing and working with submodules, helping you streamline your workflow and manage larger projects effectively. The final sections focus on troubleshooting common Git errors, from merge conflicts to authentication issues. Practical solutions and best practices ensure you can resolve problems quickly and efficiently. The book wraps up with a comprehensive Git command reference, making it a go-to resource for both new users and experienced developers. Whether you're working solo or in teams, this book will help you master version control with confidence.What you will learn - Master the fundamentals of Git for version control and workflows
- Set up and configure Git on various operating systems
- Work with repositories on GitHub and GitLab platforms
- Manage branches and handle merge conflicts effectively
- Implement advanced Git features like hooks and submodules
- Troubleshoot common Git errors and find solutions
Who this book is forThis book is ideal for developers, DevOps engineers, and technical teams seeking to improve their Git skills. Beginners can start from scratch with Git's fundamentals, while experienced users can dive deeper into advanced workflows. A basic understanding of programming concepts is recommended but not mandatory. For those looking to enhance team collaboration and automate workflows, this guide is perfect. It's also suitable for individuals aiming to master version control in a professional environment or contribute to open-source projects using GitHub, GitLab, and other platforms.
All prices
More details
Content
- Cover
- Contents
- Preface
- The Story of Git
- Everyone Uses It, but No One Understands It
- About This Book
- A Note to Readers
- 1 Git in Ten Minutes
- 1.1 What Is Git?
- 1.1.1 The git Command
- 1.1.2 Git User Interfaces
- 1.1.3 Git versus GitHub versus GitLab
- 1.2 Downloading Software from GitHub
- 1.2.1 Example: Hello World!
- 1.2.2 Example: Python Game
- 1.3 Learning to Program with Git Support
- 1.3.1 Preparation Tasks
- 1.3.2 Programming and Synchronizing
- 1.3.3 The Git Time Machine
- 2 Learning by Doing
- 2.1 Installing the git Command
- 2.1.1 Linux
- 2.1.2 macOS
- 2.1.3 Windows
- 2.1.4 Changing Options Later and Performing Updates
- 2.1.5 Changing the Default Editor
- 2.1.6 Git Bash, cmd.exe, PowerShell, or Windows Terminal?
- 2.1.7 Git Bash
- 2.1.8 Git in the Windows Subsystem for Linux
- 2.2 Setting Up a GitHub Account and Repositories
- 2.2.1 Setting Up a GitHub Account
- 2.2.2 Setting Up Repositories
- 2.2.3 Giving Access to a Repository
- 2.2.4 GitHub Organizations
- 2.2.5 Setting Up Personal Access Tokens
- 2.3 Using the git Command
- 2.3.1 Setting the Name and Email Address (git config)
- 2.3.2 Downloading a Repository (git clone)
- 2.3.3 Adding Files (git add)
- 2.3.4 Saving an Intermediate State (git commit)
- 2.3.5 Adding and Changing Files, More Commits
- 2.3.6 Status (git status)
- 2.3.7 Excluding Files from Git Management (.gitignore file)
- 2.3.8 Transferring the Repository to a Remote Server (git push)
- 2.3.9 Updating the Local Repository (git pull)
- 2.3.10 Uploading a Local Repository to GitHub/GitLab
- 2.3.11 Branches (git checkout and git merge)
- 2.3.12 Logging (git log)
- 2.3.13 More Git Commands, Options, Special Cases, and Basics
- 2.4 Authentication
- 2.4.1 Windows Credential Manager
- 2.4.2 macOS Keychain
- 2.4.3 libsecret (Linux)
- 2.4.4 SSH instead of HTTPS
- 2.4.5 Different SSH Keys for Multiple GitHub/GitLab Accounts
- 2.4.6 If It Doesn't Work
- 2.5 Learning Git in a Playful Way (Githug)
- 2.5.1 Requirements
- 2.5.2 Game Structure
- 2.6 IDEs and Editors
- 2.6.1 Git GUI
- 2.6.2 GitHub Desktop
- 2.6.3 IntelliJ IDEA
- 2.6.4 TortoiseGit
- 2.6.5 Visual Studio Code
- 2.6.6 Xcode
- 2.7 Contributing to a Third-Party GitHub Project
- 2.7.1 Forks
- 2.7.2 Pull Requests
- 2.8 Synchronization and Backups
- 2.8.1 Git Issues
- 2.8.2 Conclusion
- 3 Basic Principles of Git
- 3.1 Terminology
- 3.1.1 About Commits
- 3.1.2 Log and Logging
- 3.1.3 Local and Remote Repositories
- 3.1.4 Hooks, Submodules, and Subtrees
- 3.2 The Git Database
- 3.2.1 The .git Directory
- 3.2.2 Git Object Types: Commits, BLOBs, Trees, and Tags
- 3.2.3 References
- 3.3 Commits
- 3.3.1 The Staging Area
- 3.3.2 The Commit
- 3.3.3 More Details
- 3.3.4 Renaming, Moving, or Deleting Files from the Repository
- 3.4 Commit-Undo
- 3.4.1 Not Saving a Change Permanently after All (git reset)
- 3.4.2 Restoring Changes Made since the Last Commit (git restore)
- 3.4.3 Viewing a File in an Old Version (git show)
- 3.4.4 Viewing Changes Compared to an Old Version (git diff)
- 3.4.5 Restoring a File to an Old Version (git restore)
- 3.4.6 Reverting the Last Commits (git revert)
- 3.4.7 Reverting the Last Commits (git reset)
- 3.4.8 Switching Temporarily to an Older Commit (git checkout)
- 3.4.9 Changing the Commit Message
- 3.5 Branches
- 3.5.1 Using Branches
- 3.5.2 Problems Switching between Branches (git checkout)
- 3.5.3 Determining "main" as the Default Name for New Repositories
- 3.5.4 Renaming "master" to "main"
- 3.5.5 Internal Details
- 3.6 Merging
- 3.6.1 Merging Branches (git merge)
- 3.6.2 Main Merge or Feature Merge?
- 3.6.3 Fast-Forward Merges
- 3.6.4 Octopus Merges
- 3.6.5 Merge Process
- 3.6.6 Cherry-Picking
- 3.7 Stashing
- 3.7.1 Caching and Restoring Changes
- 3.7.2 Stashing in Practice
- 3.7.3 Managing Multiple Changes
- 3.8 Remote Repositories
- 3.8.1 Initialization Work
- 3.8.2 Push and Pull
- 3.8.3 Remote Branches
- 3.8.4 Internal Details
- 3.8.5 Multiple Remote Repositories
- 3.8.6 Workflows
- 3.8.7 Configuring Your Own Git Server
- 3.9 Resolving Merge Conflicts
- 3.9.1 Collisions in the Code
- 3.9.2 Merge Tools
- 3.9.3 Binary File Conflicts
- 3.9.4 Merge Abort and Undo
- 3.9.5 Content-Related Merge Conflicts
- 3.9.6 MERGE Files
- 3.10 Rebasing
- 3.10.1 Example
- 3.10.2 Concept
- 3.10.3 Merge Conflicts during Rebasing
- 3.10.4 Side Effects
- 3.10.5 Pull with Rebasing
- 3.10.6 Special Rebasing Cases and Undo
- 3.10.7 Squashing
- 3.11 Tags
- 3.11.1 Listing Tags
- 3.11.2 Simple Tags versus Annotated Tags
- 3.11.3 Synchronizing Tags
- 3.11.4 Setting Tags Subsequently
- 3.11.5 Deleting Tags
- 3.11.6 Modifying or Correcting Tags (Retagging)
- 3.11.7 Signed Tags
- 3.12 References to Commits
- 3.12.1 Reference Names
- 3.12.2 refname@{date} and refname@{n}
- 3.12.3 Accessing Previous Versions
- 3.12.4 Examples
- 3.12.5 References to Files
- 3.13 Internal Details of Git
- 3.13.1 Object Packages
- 3.13.2 SHA-1 Hash Codes
- 3.13.3 The .git/index File
- 3.13.4 Commands for Managing the Git Database
- 4 Data Analysis in the Git Repository
- 4.1 Searching Commits (git log)
- 4.1.1 Clear Logging
- 4.1.2 Custom Formatting (Pretty Syntax)
- 4.1.3 Searching Commit Messages
- 4.1.4 Searching Commits That Modify Specific Files
- 4.1.5 Searching Commits of a Specific Developer
- 4.1.6 Restricting the Commit Range (Range Syntax)
- 4.1.7 Limiting Commits in Time
- 4.1.8 Sorting Commits
- 4.1.9 Tagged Commits (git tag)
- 4.1.10 Reference Log (git reflog)
- 4.2 Searching Files
- 4.2.1 Viewing Old Versions of a File (git show)
- 4.2.2 Viewing Differences between Files (git diff)
- 4.2.3 Viewing Differences between Commits
- 4.2.4 Searching Files (git grep)
- 4.2.5 Determining the Authorship of Code (git blame)
- 4.3 Searching for Errors (git bisect)
- 4.4 Statistics and Visualization
- 4.4.1 Simple Number Games (git shortlog)
- 4.4.2 Statistical Tools and Scripts
- 4.4.3 Visualizing Branches
- 4.4.4 GitGraph.js
- 5 GitHub
- 5.1 Pull Requests
- 5.1.1 Pull Requests on a Team
- 5.1.2 Pull Requests in Public Projects
- 5.2 Actions
- 5.2.1 YAML Syntax
- 5.2.2 Notification to Slack
- 5.2.3 The Continuous Integration Pipeline
- 5.3 Package Manager (GitHub Packages)
- 5.3.1 Example
- 5.4 Automatic Security Scans
- 5.4.1 Node.js Security
- 5.5 Other GitHub Features
- 5.5.1 Collaboration
- 5.5.2 Issues
- 5.5.3 Discussions and Teams
- 5.5.4 Wiki
- 5.5.5 Gists
- 5.5.6 GitHub Pages
- 5.6 GitHub Command-Line Interface
- 5.6.1 Installation
- 5.6.2 Examples of Use
- 5.7 Codespaces
- 6 GitLab
- 6.1 On-Premise versus Cloud
- 6.2 Installation
- 6.2.1 Installing GitLab Runner
- 6.2.2 Backup
- 6.3 The First Project
- 6.4 Pipelines
- 6.4.1 Auto DevOps
- 6.4.2 Manual Pipelines
- 6.4.3 Test Stage in the Manual Pipeline
- 6.4.4 Release Stage in the Manual Pipeline
- 6.4.5 Debugging Pipelines
- 6.5 Merge Requests
- 6.6 Web IDE
- 6.7 Gitpod
- 7 Azure DevOps, Bitbucket, Gitea, and Gitolite
- 7.1 Azure DevOps
- 7.1.1 Trying Out Azure DevOps
- 7.1.2 Test Plans
- 7.1.3 Conclusion
- 7.2 Bitbucket
- 7.3 Gitea
- 7.3.1 Trying Out Gitea
- 7.3.2 Server Installation with Docker
- 7.3.3 Server Installation on Ubuntu 20.04
- 7.3.4 A First Example with Gitea
- 7.4 Gitolite
- 7.4.1 Installation
- 7.4.2 Application
- 8 Workflows
- 8.1 Instructions for the Team
- 8.2 Solo Development
- 8.2.1 Conclusion
- 8.3 Feature Branches for Teams
- 8.3.1 New Function, New Branch
- 8.3.2 Example
- 8.3.3 Code Review
- 8.3.4 Merge
- 8.3.5 Rebasing
- 8.3.6 Conclusion
- 8.4 Merge/Pull Requests
- 8.4.1 Forks
- 8.4.2 Conclusion
- 8.5 Long-Running Branches: Gitflow
- 8.5.1 Main, Develop, Feature
- 8.5.2 Hot Bugfixes
- 8.5.3 Bugfixes in the develop Branch
- 8.5.4 Another New Function
- 8.5.5 Conclusion
- 8.6 Trunk-Based Development
- 8.6.1 Continuous Integration
- 8.6.2 Release-Ready
- 8.6.3 Continuous Deployment
- 8.6.4 Feature Flags
- 8.6.5 Conclusion
- 8.7 Which Workflow Is the Right One?
- 9 Working Techniques
- 9.1 Hooks
- 9.1.1 Hooks in Real Life
- 9.1.2 Explanation of the Sample Script
- 9.1.3 More Hooks
- 9.1.4 Hooks versus Actions/Pipelines
- 9.2 Concise Commit Messages
- 9.2.1 Multiline Commit Messages in the Console
- 9.2.2 Commit Title and Text
- 9.2.3 Character Set and Language
- 9.2.4 Links to Issues or Pull Requests
- 9.2.5 Commit Messages of the Angular Project
- 9.2.6 Conclusion
- 9.3 Submodules and Subtrees
- 9.3.1 Copying
- 9.3.2 Using the Package Manager
- 9.3.3 Submodules
- 9.3.4 Subtrees
- 9.3.5 Internal Details
- 9.3.6 Subtree Split
- 9.3.7 Monorepos
- 9.4 Bash and Zsh
- 9.4.1 Git Aliases
- 9.4.2 Autocompletion in Bash
- 9.4.3 Oh My Zsh!
- 9.5 Two-Factor Authentication
- 9.5.1 Enabling Two-Factor Authentication on GitHub
- 9.5.2 Hardware Security Keys
- 9.5.3 Applying Two-Factor Authentication
- 10 Git in Real Life
- 10.1 Etckeeper
- 10.1.1 Usage Example
- 10.1.2 Installation and Configuration
- 10.2 Managing Dotfiles with Git
- 10.2.1 Dotfiles
- 10.2.2 Dotfiles under Git Control
- 10.2.3 git-dir and work-tree
- 10.2.4 Setting Up Dotfiles on a New Computer
- 10.2.5 Shell Commands
- 10.2.6 Vim Configuration
- 10.2.7 Miscellaneous
- 10.3 Accessing Apache Subversion (git-svn)
- 10.3.1 Application
- 10.3.2 Subversion Commits
- 10.4 Migrating from Apache Subversion to Git
- 10.4.1 Authors
- 10.4.2 Import
- 10.4.3 Tags and Branches
- 10.5 Blog with Git and Hugo
- 10.5.1 From WordPress to Hugo
- 10.5.2 Hugo
- 10.5.3 Hugo Themes as Git Submodules
- 10.5.4 Filling a Blog with Content
- 10.5.5 Git LFS
- 10.5.6 Deploying with Netlify
- 10.5.7 Deploying with a GitHub Action and GitHub Pages
- 11 Git Problems and Their Solutions
- 11.1 Git Error Messages (Root Cause and Solution)
- 11.1.1 Repository Not Found
- 11.1.2 Please Tell Me Who You Are (git commit)
- 11.1.3 Authentication Failed (git pull, git push)
- 11.1.4 Invalid User Name or Password (git clone, git pull, git push)
- 11.1.5 Permission Denied, Public Key (git clone, git pull, git push)
- 11.1.6 Permission Denied, Unable to Access &repo& (git push)
- 11.1.7 Changes Not Staged for Commit (git commit)
- 11.1.8 Your Local Changes Would Be Overwritten (git checkout, git switch)
- 11.1.9 Your Branch Is Ahead of a Remote/Branch by n Commits (git pull, git status)
- 11.1.10 You're in a Detached HEAD State (git checkout)
- 11.1.11 Pathspec Did Not Match Any Files Known to Git (git checkout)
- 11.1.12 Please Enter a Commit Message to Explain Why This Merge Is Necessary (git pull)
- 11.1.13 Pulling without Specifying How to Reconcile Divergent Branches Is Discouraged (git pull)
- 11.1.14 Cannot Pull with Rebase: You Have Unstaged/Uncommitted Changes (git pull)
- 11.1.15 There Is No Tracking Information for the Current Branch (git pull)
- 11.1.16 Your Local Changes Would Be Overwritten (git merge, git pull)
- 11.1.17 Failed to Push Some Refs to &somerepo.git& (git push)
- 11.1.18 The Current Branch &name& Has No Upstream Branch (git push)
- 11.1.19 Merge Failed, Merge Conflict in &file& (git merge, etc.)
- 11.2 Saving Empty Directories
- 11.3 Merge for a Single File
- 11.3.1 git merge-file
- 11.3.2 git checkout
- 11.4 Deleting Files Permanently from Git
- 11.4.1 Local Changes Only, without Push (git rm)
- 11.4.2 Previously Uploaded Changes, with Push (git filter-branch)
- 11.4.3 Previously Uploaded Changes, after Push (git filter-repo)
- 11.4.4 Previously Uploaded Changes, after Push (BFG Repo Cleaner)
- 11.5 Splitting a Project
- 11.6 Moving Commits to a Different Branch
- 11.6.1 git reset
- 11.6.2 git cherrypick
- 12 Command Reference
- 12.1 The git Command
- 12.1.1 Porcelain versus Plumbing
- 12.1.2 General Options
- 12.1.3 git add
- 12.1.4 git bisect
- 12.1.5 git blame
- 12.1.6 git branch
- 12.1.7 git checkout
- 12.1.8 git cherry-pick
- 12.1.9 git clean
- 12.1.10 git clone
- 12.1.11 git commit
- 12.1.12 git config
- 12.1.13 git diff
- 12.1.14 git fetch
- 12.1.15 git gc
- 12.1.16 git gui
- 12.1.17 git grep
- 12.1.18 git init
- 12.1.19 git log
- 12.1.20 git ls-files
- 12.1.21 git merge
- 12.1.22 git merge-base
- 12.1.23 git merge-file
- 12.1.24 git mergetool
- 12.1.25 git mv
- 12.1.26 git pull
- 12.1.27 git push
- 12.1.28 git rebase
- 12.1.29 git reflog
- 12.1.30 git remote
- 12.1.31 git reset
- 12.1.32 git restore
- 12.1.33 git rev-list
- 12.1.34 git revert
- 12.1.35 git rm
- 12.1.36 git shortlog
- 12.1.37 git show
- 12.1.38 git stage
- 12.1.39 git status
- 12.1.40 git submodule
- 12.1.41 git subtree
- 12.1.42 git switch
- 12.1.43 git tag
- 12.2 Revision Syntax
- 12.2.1 Commit Ranges (rev1..rev2 versus rev1.rev2)
- 12.3 git Configuration
- 12.3.1 Configuration File .git/config
- 12.3.2 Basic Settings
- 12.3.3 Configuration File .gitignore
- 12.3.4 Configuration File .gitmodules
- 12.3.5 Configuration File .gitattributes
- The Authors
- Index
Preface
Whenever several people work together on a software project, a system is needed to store all the changes made in a traceable way. Such a version control system must also give all developers access to the entire project. Each programmer knows what the others have done recently; developers can try out the code of the others and test the code's interaction with their own changes.
In the past, many version control systems were used, such as Concurrent Versions System (CVS), Apache Subversion (SVN), or Microsoft Visual SourceSafe (VSS). In the last decade, however, Git has become the de facto standard.
The GitHub web platform played a significant role in this success, making learning and using Git much easier. Countless open-source projects use the free GitHub offering for project hosting. Commercial customers who didn't want to publish their source code pay for this service. GitHub is not the only Git platform, of course: Major competitors include GitLab, Azure DevOps Services, and Bitbucket. Microsoft bought GitHub in 2018 for $7.5 billion. Unlike other acquisitions, this development hasn't hurt GitHub's popularity so far.
The Story of Git
Git came into being because Linus Torvalds needed a new version management system for the further development of the Linux kernel. The developer community had previously used the BitKeeper program. Torvalds was basically satisfied with the program, but a license change necessitated a switch. Of the open-source programs available at the time, none met his high standards.
So, the Linux chief developer briefly stopped his main work and created the basic framework for Git in just two weeks. The name Git stands for stupid or moron, and the help page man git also refers to the program as the stupid content tracker.
That this definition was an understatement became clear only gradually, long after Torvalds had given up on further development of Git and put it out of his hands. Not only did kernel developers quickly and easily switch their work to Git, but in the years that followed, more and more software projects outside the open-source world switched to Git as well.
Git made its final breakthrough when web platforms such as GitHub and GitLab became established. These websites simplify the hosting of Git projects enormously and have become an indispensable part of everyday Git life. (Even the Linux kernel is now on GitHub!)
Ironically, Torvalds' main goal in designing Git was to create a decentralized version control system. But the centralized approach of GitHub and others made Git attractive for developers outside the guru league.
Some rate the importance of Git as highly as that of Linux. Torvalds has thus twice succeeded in completely turning the software universe on its head.
Everyone Uses It, but No One Understands It
With all the enthusiasm, Git was clearly designed by professionals for professionals. We don't want to give you the impression in this book that Git is easy because it isn't. You'll need to keep in mind the following considerations:
-
Often, more than one way exists to reach a goal. For readers already familiar with Git, this idea is useful, but if you're just learning Git, this diversity can be confusing.
-
Many open-source projects are accused of being poorly documented. You really can't say that about Git. On the contrary, every git command and every possible application is explained in man pages as well as on the website (https://git-scm.com/docs) in such granularity and with so many conceivable special cases that you can get lost in the details.
-
Complicating matters further, some terms carry many different meanings, and easily confused subcommands might perform widely divergent tasks. Some terms have different meanings depending on their context or are used inconsistently in the documentation.
We have a confession: Despite years of using Git, we still learned a lot while writing this book!
About This Book
Of course, you can use Git in a minimalistic way. However, small deviations from the daily routine can then lead to surprising and often incomprehensible side effects or errors.
Every Git beginner knows that feeling when a git command returns an incomprehensible error message: In a cold sweat, you wonder whether you've just permanently destroyed a repository for all your developers and try to find someone to persuade Git to continue working after all with the right commands.
Thus, describing Git without going into depth isn't useful. Only a good understanding of how Git works gives you the confidence you'll need to cleanly fix merge conflicts or other problems.
At the same time, however, we knew that this book could only work if we gave priority to the essential functions. Despite its over 400 pages, this book is not the all-encompassing guide to Git. We cannot consider every single special case or introduce every Git subcommand, no matter how exotic. We've therefore tried to separate the wheat from the chaff in this book.
This book is divided into manageable chapters that you can read as needed, like building blocks:
-
After a short introduction in Chapter 1, we'll introduce the use of Git in Chapter 2 through Chapter 4. We'll focus on the use of Git at the command level and only marginally discuss platforms such as GitHub or other user interfaces (UIs).
For Git beginners, we recommend starting with these first four chapters. Even if you have some Git experience, you should definitely take a few hours to read Chapter 3 and try out some of the techniques we present (merging, rebasing, etc.) in a test repository. -
The next three chapters introduce the most important Git platforms. Especially for complex projects, these platforms provide useful additional functions, for instance, to perform automatic tests or to implement continuous integration (CI).
Of course, we also show you how to host your own Git repository. With GitLab, Gitea, or Gitolite, this goal can be realized relatively easily.
-
Then, we'll turn from the basics to the practical:
-
In Chapter 8, we'll describe popular patterns for guiding the work of numerous developers into orderly paths (branches) with Git.
-
Chapter 9 focuses on advanced Git features, such as hooks, submodules, subtrees, and two-factor authentication, which are all supported by major Git platforms.
-
Chapter 10 shows how you can use version configuration files (dotfiles) or the entire /etc directory with Git on Linux systems, how to switch a project from SVN to Git, and how to realize a simple website quickly and easily with Git and Hugo.
-
Chapter 11 helps you break the deadlock on hard-to-understand error messages. In this chapter, you'll also find instructions on implementing special requests, for example, removing large files from a Git repository or performing a merge operation on a selected file only.
-
-
To close the book, Chapter 12 briefly summarizes the most important git commands and their options. In this chapter, we followed the motto "Less is more." Our goal was not a complete reference, but rather a guide to the "essence of Git".
Sample Repositories
Some examples from this book are available on GitHub at the following link:
https://github.com/git-compendium
A Note to Readers
We realize that you may not begin reading this book with great enthusiasm: Perhaps you need to use Git for a project. Your goal might not be Git as such-you want to produce code to drive your project. You may not really have the time or inclination to learn about Git; you just want to know enough to use Git without errors.
We understand that motivation. Nevertheless, we strongly recommend that you invest a few hours more than planned to get to know Git systematically.
We promise you: You'll win this time back later! Poor understanding of Git inevitably means that you'll need...
System requirements
File format: ePUB
Copy protection: Adobe-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Install the free reader Adobe Digital Editions prior to download (see eBook Help).
- Tablet/smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook before downloading (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (not Kindle).
The file format ePub works well for novels and non-fiction books – i.e., „flowing” text without complex layout. On an e-reader or smartphone, line and page breaks automatically adjust to fit the small displays.
This eBook uses Adobe-DRM, a „hard” copy protection. If the necessary requirements are not met, unfortunately you will not be able to open the eBook. You will therefore need to prepare your reading hardware before downloading.
Please note: We strongly recommend that you authorise using your personal Adobe ID after installation of any reading software.
For more information, see our ebook Help page.
File format: ePUB
Copy protection: without DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use a reader that can handle the file format ePUB, such as Adobe Digital Editions or FBReader – both free (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (not Kindle).
The file format ePUB works well for novels and non-fiction books – i.e., 'flowing' text without complex layout. On an e-reader or smartphone, line and page breaks automatically adjust to fit the small displays.
This eBook does not use copy protection or Digital Rights Management
For more information, see our eBook Help page.