- Checkout is an exclusive lock on modifying a branch of object in a repository.
- Checkin is a release of exclusive lock.
There are two kinds of source control systems depending on what is the smallest unit of branching.
1) Per repository branching (CVS, SVN, GIT, Perforce, ... etc)
In products where you branch the entire repository, checkout will usually either create or enable modifications to local branch (copy) of the entire repository. In those products checkin is often unused and becomes a part of commit operation, which is at once checkout of remote branch, applying of local patch and checkin of remote branch in single operation. You do not checkin your local branch as it is permanently checked out. (Note: In GIT you don't commit to remote branch, you push your local commit to it. Strictly syntactic difference.)
2) Per object branching (ClearCase, AccuRev, Oracle ADE)
In products where you branch individual objects, like directories, files, etc. The concept of checkout and checkin applies per object per branch. You will lock the object to modify it with checkout and release it with checkin. In those products you often work on a private branch where locks do not hold anyone from working and at the time of merge of your local branch into a shared branch, the objects are also checkedout on shard branch (main, master, feature branch, etc) conflicts of merge are resolved and object is checkedin on the shared branch. This allows multiple people to "commit" at the same time to shared branch as long as they do not modify the same objects.