Subversion externals, also known as svn:externals, have been a controversial topic in the world of version control systems. Some developers swear by them, while others argue that they are an antipattern that should be avoided at all costs. So, what exactly are svn:externals and why are they considered an antipattern?
To understand svn:externals, we must first understand the concept of subversion. Subversion, or SVN, is a popular version control system that allows developers to manage and track changes made to their code. It is widely used for collaborative software development and is known for its ease of use and flexibility.
Now, svn:externals are a feature of subversion that allows developers to link external directories or files to their project. This means that instead of storing all the code for a project in one repository, developers can use svn:externals to pull in code from other repositories. This can be useful when working on projects that have common code or dependencies.
At first glance, svn:externals may seem like a convenient way to manage code and dependencies. However, they come with their own set of challenges and potential issues. One of the main arguments against svn:externals is that they make it difficult to track changes and keep a clean history of commits.
When using svn:externals, any changes made to the external code will automatically be reflected in the project's repository. This can make it difficult to pinpoint when and where a particular change was made. This can be especially problematic when multiple developers are working on the same project, as it can lead to confusion and conflicts.
Another issue with svn:externals is that they can introduce a single point of failure. If the external repository goes offline or is deleted, it can break the project's codebase. This can be a major problem if the code from the external repository is critical to the project's functionality.
Furthermore, svn:externals can also lead to security vulnerabilities. As the external code is pulled into the project's repository, any security flaws or vulnerabilities in the external code will also be present in the project's codebase. This can put the project at risk and make it more susceptible to attacks.
So, are svn:externals truly an antipattern? The answer is not a simple yes or no. It ultimately depends on the specific use case and the development team's preferences. Some teams may find that svn:externals make their workflow more efficient and manageable, while others may find that they create more problems than they solve.
In conclusion, svn:externals can be a useful feature in subversion, but they also come with their own set of challenges and potential issues. As with any tool, it is important to weigh the pros and cons and carefully consider whether it is the right fit for your project. Ultimately, the decision to use or avoid svn:externals should be based on the specific needs and goals of the development team.